hdu1002
来源:互联网 发布:淘宝店铺 出售 编辑:程序博客网 时间:2024/06/16 15:14
题目
分析:对于此题做法有两种:
其一,使2字符串的中的字符数字减去'0',逐个相加大于等于10的可以使本位减10,下一位自增1,后面的处理就非常简单了;
其二,便是读入字符串后先让各个字符减'0',一一对应存入整形数组中;之后再相加。对于2种方法大致是相同的,都要从后面向前加,逢十进位,以及数组初始化均要初始为0,一边方便运算。
但是我总觉得这道题有bug
下面是网上一位大牛的代码:虽然AC了但是有些运行结果不正确,,操,这都能AC我是醉了
#include<stdio.h>#include<string.h>int main(){ int n,i,len1,len2,j,k,pi,t,flag; char str1[1010],str2[1010]; scanf("%d",&n); for(i=1;i<=n;i++) { int a[1200]={0}; flag=0; printf("Case %d:\n",i); scanf("%s%s",str1,str2);//以字符串形式读入 len1=strlen(str1); len2=strlen(str2); printf("%s + %s = ",str1,str2); j=len1-1; k=len2-1; pi=0; while(j>=0&&k>=0)//开始相加 { if(a[pi]+(str1[j]-'0')+(str2[k]-'0')>=10)//相加后大于10的 { a[pi]=a[pi]+(str1[j]-'0')+(str2[k]-'0')-10; a[pi+1]++; } else a[pi]=a[pi]+(str1[j]-'0')+(str2[k]-'0'); pi++; k--; j--; } if(j>=0) { for(t=j;t>=0;t--) { a[pi]=a[pi]+(str1[t]-'0'); pi++; } } else if(k>=0) { for(t=k;t>=0;t--) { a[pi]=a[pi]+str2[t]-'0'; pi++; } } else if(a[pi]!=0)//对于位数相同2个数加后最高位大于10的 pi++; for(t=pi-1;t>=0;t--) { if(a[t]==0&&flag==0)//处理一次啊前导0,估计属于无用的一步 continue; else { flag=1; printf("%d",a[t]); } } printf("\n"); if(i!=n)//对于2组之间加空行的情况 printf("\n"); } return 0; }
运行结果居然是这样的:我也是想不明白啊
下面是我在大牛的基础上改的代码:虽然觉得还是有问题,但是AC了
#include <stdio.h>#include <string.h>int main(){int T,z,t,i,j,len1,len2,sum;char a[1000],b[1000];scanf("%d",&T);for(z=1;z<=T;z++){int c[1000]={0};scanf("%s",a);scanf("%s",b);printf("Case %d:\n",z);printf("%s + %s = ",a,b);len1=strlen(a);len2=strlen(b);i=len1-1;j=len2-1;t=0;while(i>=0 && j>=0) //输入的两个数相等长度的时候{if((c[t]+a[i]-'0'+b[j]-'0')>=10){c[t]=c[t]+a[i]-'0'+b[j]-'0'-10;c[t+1]++;}elsec[t]=c[t]+a[i]-'0'+b[j]-'0';i--;j--;t++;}while(i>=0) //输入的第一个数比第二个数长的时候{if(c[t]+a[i]-'0'>=10){c[t]=c[t]+a[i]-'0'-10;c[t+1]++;}elsec[t]=c[t]+a[i]-'0';i--;t++;}while (j>=0) //输入的第二个数比第一个数长的时候{if(c[t]+b[j]-'0'>=10){c[t]=c[t]+b[j]-'0'-10;c[t+1]++;}elsec[t]=c[t]+b[j]-'0';j--;t++; }/*if(c[t]>=10){c[t]=c[t]-10;c[t+1]++;}*/sum=0;if(c[t]!=0)for(i=t;i>=0;i--)printf("%d",c[i]);else{t--;for(i=t;i>=0;i--)printf("%d",c[i]);}printf("\n");if(z!=T)printf("\n");}return 0;}
阅读全文
0 0
- hdu1002
- hdu1002
- hdu1002
- hdu1002
- HDU1002
- hdu1002
- hdu1002
- hdu1002
- hdu1002
- hdu1002
- hdu1002
- HDU1002
- hdu1002
- hdu1002
- hdu1002
- HDU1002
- HDU1002
- hdu1002
- C++第六次上机实验——项目2
- protobuf高效传输
- jQuery中以0/1编号
- 单链表的创建、插入删除等操作
- 深搜例题(迷宫)
- hdu1002
- Google I/O 2017 Android O 新特性
- 正则笔记
- 添加字符
- JSP自定义标签开发入门
- 有关css3 新增background属性介绍网址
- 重定向,请求转发和请求包含
- vb.net 教程 5-7 Bitmap类 1
- hdu2546饭卡(经典01背包题目)