大数的运算
来源:互联网 发布:中国银行软件开发中心 编辑:程序博客网 时间:2024/05/22 14:55
一、大 数 的 加 法
Sample Input
2
1 2
112233445566778899 998877665544332211
Sample Output
Case 1:
1 + 2 = 3
Case 2:
112233445566778899 + 998877665544332211 = 1111111111111111110
首先将所有位对齐相加。如:
1 2 3 4 5 6 7 8 9
+ 1 2 3 4 5 6 7 8 9
———————————————————
2 4 6 8 10 12 14 16 18
最后处理进位
2 4 6 9 1 3 5 7 8
#include<stdio.h>
#include<string.h>
int main()
{
int k,l,i,j;
int a1[1005],b1[1005],c[1006];
char a[1005],b[1005];
while(scanf("%d",&t)!=EOF)
{
while(t--)
{
scanf("%s",a);
scanf("%s",b);
memset(a1,0,1005*sizeof(int));
memset(b1,0,1005*sizeof(int));
memset( c, 0,1005*sizeof(int));
for(k=0,i=strlen(a)-1; i>=0; i--)
a1[k++]=a[i]-'0';
for(k=0,i=strlen(b)-1; i>=0; i--)
b1[k++]=b[i]-'0';
l=strlen(a)>strlen(b)?strlen(a):strlen(b);
for(i=0; i<=l; i++)
{
if(a1[i]+b1[i]+c[i]>9)
{
c[i]=(c[i]+a1[i]+b1[i])%10;
c[i+1]++;
}
else
c[i]=c[i]+a1[i]+b1[i];
}
if(c[l]==0)
{
for(i=l-1; i>=0; i--)
printf("%d",c[i]);
printf("\n");
}
else
{
for(i=l; i>=0; i--)
printf("%d",c[i]);
printf("\n");
}
}
}
return 0;
}
二、大 数 的 乘法
Sample Input
1 2
112233445566778899 998877665544332211
Sample Output
Case 1:
1*2 = 2
Case 2:
112233445566778899 *998877665544332211 =112107482103740987777903741240815689
首先将所有位对应相乘。
情况1:
2 3
* 2 3
———————
6 9
4 6
________________
4 12 9
________________
5 2 9
首先将所有位对应相乘。情况2:
3 2
* 3 2
———————
6 4
9 6
________________
9 12 4
________________
10 2 4
#include<stdio.h>
#include<string.h>
int main()
{
int m,n,i,j,k,a[1000],b[1000],c[2000];
char a1[1000],b1[1000];
while(scanf("%s%s",a1,b1)!=EOF)
{
memset (a,0,sizeof(a));
memset (b,0,sizeof(b));
memset (c,0,sizeof(c));
m=strlen(a1);
n=strlen(b1);
for(j=0,i=m-1; i>=0; i--,j++)
a[j]=a1[i]-'0';
for(j=0,i=n-1; i>=0; i--,j++)
b[j]=b1[i]-'0';
for(i=0; i<n; i++)
for(j=0; j<m; j++)
c[i+j]+=a[j]*b[i];
for(i=0; i<n+m-2; i++)
if(c[i]>=10)
{
c[i+1]+=c[i]/10;
c[i]=c[i]%10;
}
if(c[m+n-2]==0)
printf("0");
else
{
for(i=m+n-2; i>=0 ; i--)
printf("%d",c[i]);
}
printf("\n");
}
return 0;
}
三、数的阶乘
#include<stdio.h>
int main()
{
int i,j,n,x,k,a[10000];
while(scanf("%d",&n)!=EOF)
{
k=0;
for(i=0; i<10000; i++)
a[i]=1;
for(i=1; i<=n; i++)
{
x=0;
for(j=0; j<=k; j++)
{
a[j]=a[j]*i+x;
x=a[j]/10000;a[j]=a[j]%10000;
}
if(x!=0)
{ k++;a[k]=x;}
}
printf("%d",a[k]);
for(i=k-1; i>=0; i--)
printf("%04d",a[i]);
printf("\n");}
return 0;
}
四、大数的取余
Sample Input
1122334455667788998877665544332211 mod 99
Sample Output
1122334455667788998877665544332211 mod 99
= 0
eg1、
100 mod 99
= (99+1) mod 99
= 99 mod 99 + 1 mod 99
= 1
eg2、
10000 mod 99
=(9999+1) mod 99
=9999 mod 99 +1 mod 99
= 1
- 大数运算的算法
- 大数的运算
- 大数间的运算
- 大数的加减运算
- 大数的运算思想
- 大数的运算
- 项目:大数的运算
- 精简的大数运算
- 高精度大数运算的实现
- 大数的取余运算
- 需要大数运算的程序
- 大数的加减乘除运算(C++)
- 有关大数的运算(1)
- 有关大数的运算(2)
- 【C++】C++大数的运算
- 十进制大数的加法运算
- 大数运算
- 大数运算
- Java MongoDB : Insert A Document
- balabala test
- 【diannaoxitong】TP-LINK无线路由器设置:防蹭网加密方法
- [Virtual Judge]ZOJ1610:Count the Colors
- 关于Ubuntu 12.04 修改默认运行级别,启动字符界面的个人理解
- 大数的运算
- 广播,组播和多播的区别
- 自己动手写类似酷狗播放器(4)_系统托盘的显示
- uva 502 DEL command(字符串处理)
- javascript 数据类型转换
- 负载均衡实战记录
- 源码研读-mina多线程模型
- (Ext基础篇) Ext核心组件
- [Cocoa]多线程 NSThread