2017-02-19 11 views
0

100000000未満の数値を逆にする関数を作っています。例えば、入力が1234ならば4321を返します。しかし、時間制限がTLEを超えています。私のforループのブレークポイントを作ったが、理由を知らない。このコードの何が間違っているのか教えてください。単純な関数で時間制限を超過しましたC

int reverse(int n){ 
    int i, j=1, d[100000000]={0}, rev=0; 

    for(i=10; ;i*10){ 
     if(n%i==n){ 
      d[j]=(n%i)/(i/10); 
      break; 
     } 
     d[j++]=(n%i)/(i/10); 
    } 

    for(j=1; ;j++){ 
     rev+=(d[j]*(i/10)); 
     i/=10; 
     if(i==10) 
      break; 
    } 
return rev; 
} 

int main(){ 
    printf("%d",reverse(321)); 
    return 0; 
} 
+1

あなたは400MBのアレイを作っています。スタックに400MBの配列を配置すると、プログラムを実行できるシステムはほとんどありません。 –

+2

また、競技会サイトを使用してプログラムする方法を習得しないでください。彼らはその目的のために本当に悪いです。代わりに[良い初心者の本を入手する](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)を読んでください。 –

+0

数字の数字を取得するための@alk –

答えて

1

数字の働きに関する基本的な知識:プレースバリュー。 %演算子を使用して数値から最下位桁を抽出すると、逆数を構築できます。試してみてください:

int reverse(int n) 
{ 
     int result = 0; 

     while (n > 0) 
     { 
       result = result * 10 + (n % 10); 
       n /= 10; 
     } 
     return result; 
} 
+0

wow thanks ..これを前に見ましたが、なぜ私はこのような単純な解決策を考えることができますか? :| –

関連する問題