高精度加法和高精度乘法
来源:互联网 发布:如何计算算法复杂度 编辑:程序博客网 时间:2024/06/03 19:12
题目描述:
谷学长有一个非常简单的问题给你,给你两个整数A和B,你的任务是计算A+B。
输入:
输入的第一行包含一个整数T(T<=20)表示测试实例的个数,然后2*T行,分别表示A和B两个正整数。注意整数非常大,那意味着你不能用32位整数来处理。你可以确定的是整数的长度不超过1000。
输出:
对于每一个样例,你应该输出两行,第一行是"Case #:",#表示第几个样例,第二行是一个等式"A+B=Sum",Sum表示A+B的结果。注意等式中有空格。
样例输入
2
1
2
112233445566778899
998877665544332211
样例输出
Case 1:
1 + 2 = 3
Case 2:
112233445566778899 + 998877665544332211 = 1111111111111111110
#include"stdio.h"
#include"string.h"
int num1[1010];
int num2[1010];
int sum[1100];
char char1[1010];
char char2[1010];
int main()
{
int T;
int i;
int Case;
Case=1;
scanf("%d",&T);
while(T--)
{
memset(char1,0,sizeof(char1));
memset(char2,0,sizeof(char2));
memset(num1,0,sizeof(num1));
memset(num2,0,sizeof(num2));
scanf("%s",char1);
scanf("%s",char2);
for(i=strlen(char1)-1;i>=0;i--)
num1[i]=char1[strlen(char1)-1-i]-'0';
for(i=strlen(char2)-1;i>=0;i--)
num2[i]=char2[strlen(char2)-1-i]-'0';
int len;
len=strlen(char1)>strlen(char2)?strlen(char1):strlen(char2);
memset(sum,0,sizeof(sum));
for(i=0;i<len;i++)
{
sum[i]=sum[i]+(num1[i]+num2[i])%10;
sum[i+1]=sum[i+1]+(num1[i]+num2[i])/10;
}
green no ac yellow ac
//sum[i]=num1[i]+num2[i]+m;
m=sum[i]/10;
sum[i]=sum[i]%10;
if(sum[len])len++;
//output
printf("Case %d:\n",Case++);
for(i=strlen(char1)-1;i>=0;i--)
printf("%d",num1[i]);
printf(" + ");
for(i=strlen(char2)-1;i>=0;i--)
printf("%d",num2[i]);
printf(" = ");
for(i=len-1;i>=0;i--)
printf("%d",sum[i]);
printf("\n");
}
return 0;
}
收获:绿色通不过,forget it,黄色算法更robust,以后处理进位问题,采用黄色算法,不会 进行越界操作。
更新:黄色算法就是错了,处理进位有问题,999+1=9910进位必须拉出来单练
再优化:进位不拉出来考虑
sum[i]=sum[i]+num1[i]+num2[i];
sum[i+1]=sum[i]/10;
sum[i]=sum[i]%10;
题目描述:
给出两个正整数A和B,计算A*B的值。保证A和B的位数不超过500位。
输入:
读入两个用空格隔开的正整数
输出:
输出A*B的值
样例输入
3 12
样例输出
36
#include<string.h>
#define byteMax 505
#define dbm 1010
int main()
{
char c1[byteMax],c2[byteMax];
int num1[byteMax],num2[byteMax];
int multi[dbm];
int i,j;
scanf("%s",c1);
scanf("%s",c2);
int len1,len2,len;
len1=strlen(c1);
len2=strlen(c2);
len=len1+len2;
for(i=len1-1;i>=0;i--)
num1[i]=c1[len1-1-i]-'0';
for(i=len2-1;i>=0;i--)
num2[i]=c2[len2-1-i]-'0';
memset(multi,0,sizeof(multi));
for(i=0;i<len1;i++)
for(j=0;j<len2;j++)
{
multi[i+j]+=num1[i]*num2[j];
multi[i+j+1]+=(multi[i+j])/10;
multi[i+j]=multi[i+j]%10;
}
if(multi[len]!=0)len++;
if(multi[len]==0)len--;
for(i=len-1;i>=0;i--)
printf("%d",multi[i]);
return 0;
}
阅读全文
1 0
- 高精度加法和高精度乘法
- 高精度加法和乘法
- 高精度(乘法和加法)
- 高精度加法与高精度乘法
- 高精度加法,乘法,阶乘
- 高精度加法与乘法
- 高精度加法乘法类
- 大数的加法和乘法,高精度
- 高精度算式计算(加法和乘法)
- 高精度加法和乘法的c++实现
- 高精度运算-(加法减法乘法)
- 高精度加法以及乘法运算
- 高精度加法减法乘法除法
- 短短的高精度加法乘法
- C++ 高精度加法 高精度减法 高精度乘法1
- UVA 465 Overflow 高精度加法和乘法运算
- 高精度乘法和阶乘
- 高精度乘法和除法
- 使用Apache POI处理EXCEL数据
- 《Java编程思想》数组的实用功能
- ajax接收到的数据是一个页面的代码的原因
- 大话Vim!!!
- Gym-100851F Froggy Ford 最短路变形 dijkstra || spfa
- 高精度加法和高精度乘法
- 顺序表实现
- sgu-194-Reactor Cooling(无源汇有上下界最大流)
- 文章标题
- pandas描述性统计 (1)
- BP算法
- Android 冷启动(所谓白屏)优化方案
- 空瓶子换汽水的问题
- bzoj 3362: [Usaco2004 Feb]Navigation Nightmare 导航噩梦 带权并查集