HDOJ-1002 A + B Problem II (非负大整数相加)

http://acm.hdu.edu.cn/showproblem.php?pid=1002

输入的数都是正整数,比较好处理,注意进位。

//非负大整数加法

# include <stdio.h>
# include <string.h>
# define MAX 1100

int main()
{
	int t;
	char Num1[MAX], Num2[MAX], Num3[MAX];//Num3[] 用于保存结果

	scanf("%d", &t);
	for(int Count = 0; Count < t; Count++)
	{
		if(Count)	printf("\n");

		scanf("%s %s", Num1, Num2);

		//获取两个数字的位数
		int Len1 = strlen(Num1);
		int Len2 = strlen(Num2);
		int Len3 = 0;
		memset(Num3, ‘0‘, sizeof(Num3));

		//从低位开始按位相加 先不管进位
		for(int i = Len1 - 1, j = Len2 - 1; i >= 0 && j >= 0; i--, j--)
		{
			Num3[Len3++] = Num1[i] + Num2[j] - ‘0‘;

			//如果有一个数组先为空 则把另一个数组里剩下的数字放入Num3[]
			if(i == 0)
				while(j--) Num3[Len3++] = Num2[j];
			else if(j == 0)
				while(i--) Num3[Len3++] = Num1[i];
		}

		//处理进位
		for(int i = 0; i < Len3; i++)
		{
			if(Num3[i] > ‘9‘)
			{
				Num3[i + 1] += (Num3[i] - ‘0‘) / 10;
				Num3[i] = (Num3[i] - ‘0‘) % 10 + ‘0‘;
			}
		}

		//格式输出
		for(int i = MAX - 1; i >= 0; i--)
		{
			if(Num3[i] != ‘0‘)
			{
				printf("Case %d:\n", Count + 1);
				printf("%s + %s = ", Num1, Num2);
				while(i >= 0) printf("%c",Num3[i--]);
				printf("\n");
			}
		}
	}

	return 0;
}

  

时间: 2024-10-10 20:12:24

HDOJ-1002 A + B Problem II (非负大整数相加)的相关文章

ACM: A + B Problem II (两个大整数相加)

Code: #include <stdlib.h> #include <stdio.h> #include <string.h> #define MAX 1000 //给数组赋值 void arrV(int a[],int len,int p){ int i; for(i=0;i<len;i++){ a[i]=p; } } //打印数组中的运算结果 void printRverse(int a[]){ int len=0,i=0; while(a[i]!=-1){

HDOJ 1002 A + B Problem II (Big Numbers Addition)

题目链接在此?http://acm.hdu.edu.cn/showproblem.php?pid=1002 这题也比较简单,只需要开三个长度为1000的char数组来分别储存a.b.ans,再利用我们加法的算法,先向右对齐再相加.注意一下进位时的特殊情况就好了. 不过笔者的代码写好后提交上去,两次Presentation Error,然后才发现只是最后多输出一个空行的问题  =.= Orz /**  * HDOJ 1002 A + B Problem II  * Big Numbers Addi

hdoj 1002 A + B Problem II

A + B Problem II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 242959    Accepted Submission(s): 46863 Problem Description I have a very simple problem for you. Given two integers A and B, you

hdoj 1002 A + B Problem II【大数加法】

A + B Problem II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 260585    Accepted Submission(s): 50389 Problem Description I have a very simple problem for you. Given two integers A and B, you

hdoj 1002 A + B Problem II 高精度 java

A + B Problem II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 241933    Accepted Submission(s): 46646 Problem Description I have a very simple problem for you. Given two integers A and B, you

杭电 1002 A + B Problem II(大数处理)

A + B Problem II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 209179    Accepted Submission(s): 40226 Problem Description I have a very simple problem for you. Given two integers A and B, yo

HDU 1002 A + B Problem II(两个大数相加)

详细题目点击:http://acm.hdu.edu.cn/showproblem.php?pid=1002 Problem Description I have a very simple problem for you. Given two integers A and B, your job is to calculate the Sum of A + B. Input The first line of the input contains an integer T(1<=T<=20)

抓起根本(二)(hdu 4554 叛逆的小明 hdu 1002 A + B Problem II,数字的转化(反转),大数的加法......)

数字的反转: 就是将数字倒着存下来而已.(*^__^*) 嘻嘻…… 大致思路:将数字一位一位取出来,存在一个数组里面,然后再将其变成数字,输出. 详见代码. 1 while (a) //将每位数字取出来,取完为止 2 { 3 num1[i]=a%10; //将每一个各位取出存在数组里面,实现了将数字反转 4 i++; //数组的变化 5 a/=10; 6 } 趁热打铁 例题:hdu 4554 叛逆的小明 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid

HDU 1002 A + B Problem II(大整数相加)

A + B Problem II Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Description I have a very simple problem for you. Given two integers A and B, your job is to calculate the Sum of A + B. Input The first line of the input c