面向对象寒假作业编程题
链接如下:https://github.com/hhzb123/object-oriented
题目如下
:
1.题意理解:要先求两个数之和,然后再求它的规范化表达式。
2.解题思路:先把两个数之和求出,通过这个数除以1000得到去小数的整形数据再乘1000得到减去最后三位数的数字,接着用原先的数字减去这个数字就得到了最后的三位数的数值,并把它存在数组中。接着把这个数除以1000,去掉后面的三位数,继续循环得到下一组三位数,依次列推。结束条件是把这个数一直除以1000去掉三位数,直到这个数小于1000结束循环。不过,如果这个数小于1000,直接输出就可以啦。
接着是输出过程,由于上个环节存入数组是从数字的最后三个数开始一组一组存入的,所以输出时应该把数字倒着输出来如果数字是三位数就直接输出,如果不是就需要补0至三位数。
3.错误纠正:刚提交时,我遇到了错误,仔细寻找才发现是因为遇到了负数,这样子每一组三位数都有了负号,因此答案错误。
还有一个错误就是我的负数变成正数再输出负号只有4位数以上有,三位数并没有,因此三位数负数会输出正数。
解决方法:输入数字进行正负判定,如果这个数字是正数就直接进入下面的程序。如果这个数是负数就把它变成正数在输出时前面加一个负号输出就可以了。
#include<stdio.h> int main() {int a,b,sum,x[200],i,j,pan=0,cai=0; scanf("%d%d",&a,&b); sum=a+b; if(sum<0){ pan++; sum=-sum; } if(sum<1000) cai++; if(cai==0){ for(i=1;;i++){ x[i]=sum-sum/1000*1000; sum=sum/1000; if(sum<1000) { i++; x[i]=sum; break; } } for(j=i;j>=1;j--) {if(pan==1&&j==i) printf("-"); if(j==i) printf("%d",x[j]); if(x[j]>=100&&j!=i) printf("%d",x[j]); else if(x[j]<10&&j!=i ) printf("00%d",x[j]); else if(x[j]>=10&&j!=i) printf("0%d",x[j]); if(j!=1) printf(","); } } else if(cai!=0&&pan==0) printf("%d",sum); else if(cai!=0&&pan==1) printf("-%d",sum); }