刷题第五天:南邮NOJ【1011大数加法】
2016-05-02 01:59
483 查看
大数加法
时间限制(普通/Java) :
1000 MS/ 3000 MS 运行内存限制 : 65536KByte
总提交 : 3359 测试通过 : 877
比赛描述
求两个非负整数(1000位以内)的和。
输入
两个非负整数(1000位以内),以空格分隔。
输出
两个非负整数的和。
样例输入
111111111111 222222222222
样例输出
333333333333
提示
题目来源
GUOJ
来自 <http://acm.njupt.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1011>
#include <stdio.h>
#include <string.h>
int main()
{
char num1[1001];//存放第一组数据
char num2[1001];//存放第二组数据
int sum[1005];//存放计算结果
int a=0,b=0,i,c=0,flag=0;//flag进位标志初始化为0
scanf("%s",num1);//将第一组数据放入数组
scanf("%s",num2);
a=strlen(num1);//计算数据长度
b=strlen(num2);
if(a>=b)//分两种情况,sum数组的存放长度由a,b中大的一个决定
{
for(i=0;i<a;i++)//循环计算到第a-1位
{
if(i<b)//此情况为两组数据在同一下标位上都有数据
{
c=num1[a-i-1]-'0'+num2[b-i-1]-'0'+flag;
flag=0;//将标志清零,以免影响后续计算
if(c>=10)//判断若大于10则发生进位
{
flag=1;//标志置1
sum[i]=c%10;//对该位取余
}
else//否则直接赋值
sum[i]=c;
}
else//此情况为在该下标位上只有第一组数组有值
{
c=num1[a-i-1]-'0'+flag;
flag=0;
if(c>=10)
{
flag=1;
sum[i]=c%10;
}
else
sum[i]=c;
}
}
if(flag)//考虑到如55+65这种情况将新开辟一个字节
{
sum[i]=1;
a++;
}
for(i=a-1;i>=0;i--)
printf("%d",sum[i]);
}
else
{
for(i=0;i<b;i++)
{
if(i<a)
{
c=num2[b-i-1]-'0'+num1[a-i-1]-'0'+flag;
flag=0;
if(c>=10)
{
flag=1;
sum[i]=c%10;
}
else
sum[i]=c;
}
else
{
c=num2[b-i-1]-'0'+flag;
flag=0;
if(c>=10)
{
flag=1;
sum[i]=c%10;
}
else
sum[i]=c;
}
}
if(flag)//考虑到如94+6这种情况也将新开辟一个字节
{
sum[i]=1;
b++;
}
for(i=b-1;i>=0;i--)
printf("%d",sum[i]);
}
return 0;
}
时间限制(普通/Java) :
1000 MS/ 3000 MS 运行内存限制 : 65536KByte
总提交 : 3359 测试通过 : 877
比赛描述
求两个非负整数(1000位以内)的和。
输入
两个非负整数(1000位以内),以空格分隔。
输出
两个非负整数的和。
样例输入
111111111111 222222222222
样例输出
333333333333
提示
题目来源
GUOJ
来自 <http://acm.njupt.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1011>
#include <stdio.h>
#include <string.h>
int main()
{
char num1[1001];//存放第一组数据
char num2[1001];//存放第二组数据
int sum[1005];//存放计算结果
int a=0,b=0,i,c=0,flag=0;//flag进位标志初始化为0
scanf("%s",num1);//将第一组数据放入数组
scanf("%s",num2);
a=strlen(num1);//计算数据长度
b=strlen(num2);
if(a>=b)//分两种情况,sum数组的存放长度由a,b中大的一个决定
{
for(i=0;i<a;i++)//循环计算到第a-1位
{
if(i<b)//此情况为两组数据在同一下标位上都有数据
{
c=num1[a-i-1]-'0'+num2[b-i-1]-'0'+flag;
flag=0;//将标志清零,以免影响后续计算
if(c>=10)//判断若大于10则发生进位
{
flag=1;//标志置1
sum[i]=c%10;//对该位取余
}
else//否则直接赋值
sum[i]=c;
}
else//此情况为在该下标位上只有第一组数组有值
{
c=num1[a-i-1]-'0'+flag;
flag=0;
if(c>=10)
{
flag=1;
sum[i]=c%10;
}
else
sum[i]=c;
}
}
if(flag)//考虑到如55+65这种情况将新开辟一个字节
{
sum[i]=1;
a++;
}
for(i=a-1;i>=0;i--)
printf("%d",sum[i]);
}
else
{
for(i=0;i<b;i++)
{
if(i<a)
{
c=num2[b-i-1]-'0'+num1[a-i-1]-'0'+flag;
flag=0;
if(c>=10)
{
flag=1;
sum[i]=c%10;
}
else
sum[i]=c;
}
else
{
c=num2[b-i-1]-'0'+flag;
flag=0;
if(c>=10)
{
flag=1;
sum[i]=c%10;
}
else
sum[i]=c;
}
}
if(flag)//考虑到如94+6这种情况也将新开辟一个字节
{
sum[i]=1;
b++;
}
for(i=b-1;i>=0;i--)
printf("%d",sum[i]);
}
return 0;
}
相关文章推荐
- centOS6.4部署svn
- HDU 1097 - A hard puzzle
- Minecraft源码分析(1) - 刷怪逻辑
- MySQL与PostgreSQL
- 爬取京东本周热卖商品所有用户评价存入MySQL
- leetcode-116. Populating Next Right Pointers in Each Node
- eclipse和myclipse编写xml文件,java自动提示功能
- 6.布局简介
- 什么是HTML?
- web day22 文件上传,下载,JavaMail
- 从txt文件中逐行读取字符串,并且用读取到的字符串在Mat型的图片上画矩形
- iOS中实现返回可拉伸不变形的图片
- 窗外发传单的女孩子
- leetcode笔记:Reverse String
- gearman 实例一枚
- C++基础实例(1)
- HDU 1045 - Fire Net
- 20145104张家明 《Java程序设计》第9周学习总结
- 常用Javascript框架总结
- bfs 2016.5.2