ZOJ 1292 大数相加
来源:互联网 发布:miao聊天软件下载 编辑:程序博客网 时间:2024/05/01 02:53
这是我自己写的大数相加的代码,看起来有些长,不过胜在好理解。。。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void reverse(char *s)
{
int i,j,len;
char temp;
len=strlen(s);
for(i=0,j=len-1;i<j;j--,i++){
temp=s[i];
s[i]=s[j];
s[j]=temp;
}
}
int CTN(char c){ // 字符转化为数字
int n;
if(c>='0' && c<='9') n=c-'0';
else if(c>='a' && c<='j') n=c-'a'+10;
return n;
}
char NTC(char n){
char ch;
if(n>=0 && n<=9) ch=n+'0'; // 数字转化为字符
else if(n>=10 && n<20) ch=n+'a'-10;
return ch;
}
int main()
{
int i,j,len1,len2,l,c,n;
char s1[105],s2[105];
int m[105];
scanf("%d",&n);
memset(s1,0,sizeof(s1));
while(n--){
scanf("%s",s1);
len1=strlen(s1);
reverse(s1);
memset(m,0,sizeof(m));
for(i=0;i<len1;i++)
m[i]=CTN(s1[i]);
memset(s2,0,sizeof(s2));
while(scanf("%s",s2) && strcmp(s2,"0")){
len1=strlen(s1);
len2=strlen(s2);
reverse(s2);
l=len1>len2?len1:len2;
for(i=0,c=0;i<l||c;i++ )
{
if( i<len1)
c+=m[i];
if( i<len2 )
c+=CTN(s2[i]);
m[i]=c%10;
c/=10;
s1[i]=NTC(m[i]);
}
memset(s2,0,sizeof(s2));
}
while(!m[i]){
--i;
if(i<0) {printf("0"); break;}
}
for( ;i>=0;i--){
s1[i]=NTC(m[i]);
printf("%c",s1[i]);
}
printf("\n");
if(n) printf("\n");
}
//system("pause");
return 0;
}
- ZOJ 1292 大数相加
- HDU 1047 || ZOJ 1292 大数相加
- 大数相加
- 大数相加
- 大数相加
- 大数相加
- 大数相加
- 大数相加
- 大数相加
- 大数相加
- 大数相加
- 大数相加
- 大数相加
- 大数相加
- 大数相加
- 大数相加
- 大数相加
- 大数相加
- 立体匹配算法_RankTransform .
- HDU 3466 0-1背包
- 行-4-understand的再次学习理解
- U盘安装ubuntu 12.04-LTS-liveCD问题
- HDU 1059 多重背包
- ZOJ 1292 大数相加
- C/C++运算符优先级表 - C Operator Precedence Table
- 编辑myeclipse的注释用于自己的开发
- 双目匹配与视差计算
- 大数相乘
- 虚拟服务器与DMZ
- 第七章 对话框1 windows程序设计 王艳平版
- 面向对象的概念是什么?和面向过程有什么区别?
- ZOJ 2386 归并排序