杭电 1002
来源:互联网 发布:沙滩鞋淘宝 编辑:程序博客网 时间:2024/06/06 13:23
非常简单的题目,大数相加,而且不用考虑是负数的情况,这就更简单了。
处理思路: 利用字符串来进行处理。
唯一需要注意的是最后的格式控制,着实坑爹。
AC代码:
#include<stdio.h>#include<string.h> #define MAX 1001int main(){ char num1[MAX]; char num2[MAX]; char result[MAX+1]; int loop; scanf("%d",&loop); for(int k=0;k<loop;k++) { scanf("%s",num1); scanf("%s",num2); int lengthNum1=strlen(num1); int lengthNum2=strlen(num2); int isChange = false; // 交换位置,保证num2是字数最长的 if( lengthNum1 > lengthNum2 ) { char numTemp[MAX]; strcpy(numTemp,num1); strcpy(num1,num2); strcpy(num2,numTemp); isChange = true; } int j=strlen(num1)-1; int add=0; // 处理位数相同的 for( int i=strlen(num2)-1; (i>=0 && j>=0) ;i-- ) { char tmp = num2[i] + ( num1[j] - '0' ) + add; if( tmp > '9') { add = 1; tmp = tmp - 10; } else { add = 0; } result[i] = tmp; j--; } // 处理位数多余的 for(int i= strlen(num2) -strlen(num1) -1; i >= 0;i--) { char tmp = num2[i] + add; if( tmp > '9') { add = 1; tmp = tmp - 10; } else { add = 0; } result[i] = tmp; } //记得字符串最后一位置结束符 result[strlen(num2)]='\0'; printf("Case %d:\n",k+1); //根据是否交换来过数字决定输出顺序 if( true == isChange ) { printf("%s + %s = ",num2, num1); } else { printf("%s + %s = ",num1,num2); } //控制最后一个进位 if(add != 0) { printf("1"); } //控制最后一次输出是否换行 printf("%s\n",result); if( k != loop-1) { printf("\n"); } }}
0 0
- 杭电acm 1002
- 杭电 1002
- 杭电1002
- 杭电1002
- 杭电1002
- 杭电ACM 1002
- 杭电 1002
- ACM 杭电 1002
- 杭电1002
- 杭电 1002
- 杭电ACM 1002
- 杭电1002
- 杭电1002
- 杭电1002
- 杭电 1002
- 杭电OJ 1002
- 杭电oj 1002
- 杭电1002
- 动态规划-jobdu-1547:出入栈
- IE6,IE7下text-indent消失问题
- 打开Eclipse时出现 "Failed to create the Java Virtual Machine
- 生活随笔与读书笔记20140302
- 将HDFS中的数据导入HBase
- 杭电 1002
- Vijos P1763 Wormhole
- c# AntiSocialRobots 源码分析
- iOS多线程之NSThread
- Eclipse搭建安卓-android开发环境
- 表单中的验证码通过js简单实现局部刷新效果
- 关于 wcout 输出中文的问题
- launchMode(启动模式)
- [Java]Swing基础编程【2】事件模型 持有对方的引用