计算机考研复试全书,《计算机考研复试上机指导全书习题集》试读版.pdf

《计算机考研复试上机指导全书习题集》试读版

1001. A+B Format (20)

Time Limit: 400 MS Memory Limit: 65536 KB

题意

给出两个整数a、b (不超过10^9),求a+b 的值,并按照xxx,xxx,xxx,xxx 的格式输出。

样例解释

Sample One

-1000000 + 9 = -999991

按照格式输出为-999,991 。

考察点

字符串处理

思路

Step 1

对输入的两个数字a 与b 进行累加,并赋值给sum 。之后判断累加后得到的sum 是否为负数,

如果是负数,则负号先行输出,并令sum = -sum 来取正。

Step2

把sum 的每一位存到数组中 (例如123 存到数组num[]中就是num[0] = 3、num[1] = 2、num[2]

= 1,即sum 的低位存储到num[]的低位),之后从高位开始输出数组元素,每输出3 个数字输出 1

个逗号,最后3 个数字后面不输出。

注意点

Note 1: 把sum 存放到数组时,如果是用while 写的话,就要注意0 这个数据需要特殊处理,否则

while 循环进不去,导致len 会等于0 ;而如果用do while 循环写的话,则可以不用考虑。

//使用while 的写法

int len = 0;

if(sum == 0) num[len++] = 0;

while(sum) {

num[len] = sum % 10;

sum /= 10;

++len;

}

//使用do...while 的写法

= 5 =

int len = 0;

do {

num[len] = sum % 10;

sum /= 10;

++len;

}while(sum);

Note 2: 注意最低位后面是不需要输出逗号的,所以需要在输出逗号时判断是否是最低位。

Note 3: 这题还可以采用下面的写法,不妨拓宽下思路 (省略Step1 的步骤):

在 printf 的格式化输出中,%3d 表示输出三位整数,不满三位的高位补空格;而%03 表示输出三位

整数,不满三位的高位补0 。于是可以得到下面这个简洁的写法,不妨好好理解一下:

if(sum >= 1000000) printf("%d,%03d,%03d", sum/1000000, sum%1000000/1000, sum%1000);

else if(sum >= 1000) printf("%d,%03d", sum/1000, sum%1000);

else printf("%d", sum);

参考代码

#include

int num[10];

int main() {

int a, b, sum;

scanf("%d%d",&a, &b);

sum = a + b; //将a+b 赋值给sum

if(sum < 0) { //sum 为负数时,输出负号并取sum 的相反数

printf("-");

sum = -sum;

}

int len = 0; //len 存放sum 的长度

if(sum == 0) num[len++] = 0; //sum 为0 时特殊处理

while(sum) { //将sum 存入数组num[]中,其中sum 的低位存放到num[]的低位

num[len++] = sum % 10; //将sum 的末位sum%10 存放到num[len],然后len++

sum /= 10; //去除sum 的末位

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值