"1001. A+B Format (20)" 解题报告

Github : git@github.com:Circlecos/object-oriented.git
PDF Of Markdown : "1001. A+B Format (20)" 解题报告

问题描述

Calculate a + b and output the sum in standard format -- that is, the digits must be separated into groups of three by commas (unless there are less than four digits).

解题思路

联想到以前做过的一题字符串替换的题目——"将字符串中特定字符替换并输出新字符串",当时TLE是因为直接对原字符串进行操作然后输出。优化是直接输出不修改原字符串了。
所以这题我也采取一样的思路,直接在输出的时候加入逗号。
那么下一个问题是数字要转换成"字符串"(类比),简单啊,各种/10 %10 就好了。
但是有点浪费,因为输出的时候还需要计算现在是第几位
所以我想到/1000是不是直接取三位呢
试验了一下然后就没有然后了(下一个.jpg(雾

源代码

 #include <stdio.h>
 #include <math.h>
 #define N 3
 int main(void)
 {
     int a,b,sum,q,s[5],i,n,wid;
     scanf("%d %d",&a,&b);
     sum=a+b;
     if (sum<0) {printf("-");sum=abs(sum);}
     n=0;wid=pow(10,N);
     while (sum>=wid)
     {
         q=sum%wid;
         s[n]=q;
         sum/=wid;
         n++;
     }
     s[n]=sum;
     for (i=n;i>=0;i--)
     {
         if (i!=n) printf("%0*d",N,s[i]);
         else printf("%d",s[i]);
         if (i!=0) printf(",");
     }
     return 0;
 }

调试

第一个需要调整的是最后剩下的几位数的处理,开始的时候是直接 printf("%d,",sum) ,然后和小于1000的数据点就出事了
然后调成了现在的样子
然后出现了"1000 10"数据点变成“1,10"的问题 然后加上了%03d
然后上线测试 一个WA

"1001. A+B Format (20)" 解题报告

这时候的代码是 while (sum>wid)
只有一个WA基本是特殊数据点了
然后看到这句就想到了1000
果然输出并不是"1,000" 而是"1000"
改掉 AC

"1001. A+B Format (20)" 解题报告

其他

嘛没用IDE的debug因为这些bug并不是很难找
然后按习惯#define N 3却发现了一个问题
printf("%03d",s[i]);这个3怎么改(晕(◎﹏◎)
查了下 于是有个现在的代码hhhh(其实之前没找到刚刚找到hhhhhhhh
然后傻傻的push完了再commit --amend导致github变成了那样
恩 就这样

上一篇:PAT 甲级1001 A+B Format (20)(C++ -思路)


下一篇:eclipse+PyDev 中报错"scrapy.spiders.Spider" ,可用"# @UndefinedVariable"压制.