0

このコードは私に正しい答えを与えません、そして私は間違いを見つけることができませんでした。コードを修正するにはどうすればよいですか?

シナリオ:最初に数値の桁数を決定し、次に数値を回文します。

#include<stdio.h>
#include<conio.h>
#include<math.h>

int main()
{
    int number=42321,j=0,dig,temp;
    long long pal= 0LL;

    temp=number;     
    while(temp>0)
    {
          temp/=10;
          j++;
    }

    while (number>0)
    {          
          dig=number%10;
          pal+=dig*(int)pow(10,j);
          number/=10;
          j--;  
    }

    printf("%d",pal);
    getch();   
}
4

2 に答える 2

3

while(temp>0)
{
      temp/=10;
      j++;
}

を持っている桁数を計算しています。これnumberは、を超えない10の累乗の指数より1つ多くなりnumberます。jその後、デクリメントする必要があります。

ただし、使用するpow()のが最善の方法ではありません。逆数を段階的に作成する方がはるかに優れています。

while(temp > 0)
{
    pal = 10*pal + temp%10;
    temp /= 10;
}
于 2012-09-30T15:26:25.547 に答える
2

palとして定義しましlong longた。その後、コンパイラに嘘をつき、型の値を渡すが、型の値をint送信することを伝えました。pallong long

    printf("%d",pal); /* WRONG */

そうしないでください。適切な変換指定子を使用する

    printf("%lld", pal); /* preferred */

または値を適切なタイプにキャストします

    printf("%d", (int)pal); /* UGH! */
于 2012-09-30T15:31:51.990 に答える