質問: 改善すべき点を教えてください。 趣味で最近cを始めたのですが、ある本で「0を除く2種類の数字のみで構成された平方数」は、81619の二乗(6661661161)より大きいものはないらしい。 と書かれていたので、確かめたくなり色々調べながらプログラミングしてみました。 なんとか動くようになったのですが、いまいちスピードが遅いように感じるのです。 そこで、こうすればスピードを速くできる、ここが不自然な書き方になっているなど、どこか改善すべき点があれば教えて欲しく質問しました。 あと、char型からint型に数字を変換する時に恐らく不自然な方法でやっているので、正規の方法がありましたらそれも教えていただけると助かります。 よろしくおねがいします。 ここから――――――――――――――――――――――― #include #include int main(void){ double i; //平方根 int m; //整数(for用) double x; //平方数 char str[100]; //文字列(途中作業用) int mono[100]; //1桁の数字(途中作業用) int len; //桁数 int num; //二つ目の数の置場 for( i=1; i<=10000000000; i++){ x=i*i; //二乗 sprintf(str,"%.0f",x); //文字列に平方数を変換 len=strlen(str); //桁数を求める if(len<=1) goto print; //平方数が一桁ならprintへ for( m=0; m %26.0f\n", i, x); out: //ラベル out } return 0; }
回答: gcc+gprofで計測したところ、2種類の数字のみかどうかの判別はテーブルを使ったもの(oh-orangeさんのもの)より、一つ一つ確認していくもののほうが速かったです。 比較コード(これ以外は同じして比較した) テーブル版(table[1024]はグローバルにしてmain()内で初期化) int check_num(char ntmp[],int len){ int chk,m; for(chk=m=0;m