c语言问题 高分通宵等待!!!

来源:百度知道 编辑:UC知道 时间:2024/09/28 05:25:03
int n,a,b,c,d;
scanf("%d",&n);
a=n/1000;
b=(n/100)%10;
c=(n%100)/10;
d=n%1000;
a=(a+9)%10;
b=(b+9)%10;
c=(c+9)%10;
d=(d+9)%10;
n=1000*a+100*b+10*c+d;printf("%d\n",n);
n为4位数 先把每位数拆出来 再+9求余 问题是求余后若a=0,因为是首位,0被舍了 那n就会少了一个数 怎么保留首位的0 例如: 0356
1

打印时用%04d

如果你把0 3 5 6 转换为 5 6 0 3 依然要保证第一位是0不舍去的话

你可以先将 a b c d 转换为char型

即原数+48(0的ascii码是48)并转化为char 输出即可

要运算时则在换回int型

即char型-48并转化为int

printf("%04d",n);

那就不要用INT的表达式拉...这样用INT的形式就没有前面的0拉 ...或者你可以再前面定义以下...定义为ASCII值看下..能行不!!!

一楼二楼的方法可以,你也可以在后边对a进行if的假设啊

试一试用字符型表示呢?‘0356’不然0在开头的整形数字好像不会输出0的。