为什么我用编译器尝试一个15位的数输出来的结果就不对,而1-8位d 数字输出来的结果就正确。

img


#include <stdio.h>
int main(){
    int a[20];
    int n,i,j,k=0,temp,newn=0;
    printf("请输入一个正整数n");
    scanf("%d",&n);
    while(n>0){
        a[k]=n%10;
        n=n/10;
        k++;
    }
    for(i=0;i<k-1;i++){
        for(j=0;j<k-1;j++){
            if(a[j]<a[j+1]){
            temp=a[j];
            a[j]=a[j+1];
            a[j+1]=temp;
        }
        }
    }
    for(i=0;i<k;i++)
    newn=newn*10+a[i];
    printf("%d",newn);
    return 0;
}

为什么我用编译器尝试一个15位的数输出来的结果就不对,而1-8位的数字输出来的结果就正确。

15位的数已经超出 int 型所能表示的范围了,溢出。

是不是超范围了,用long int试下呢