大整数操作(加、减和未完成的乘法)
来源:互联网 发布:我的世界java怎么安装 编辑:程序博客网 时间:2024/06/13 00:53
原来的代码不见了……
#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAXN 510typedef struct{int n[MAXN];int len; int digit;}Bigint;Bigint change(char ch[]);//类型转换void print(Bigint x);//输出Bigint addtion(Bigint a,Bigint b);Bigint subtract(Bigint a,Bigint b);int compare(Bigint a,Bigint b);//比较大整数a,b的大小,a>b时为1Bigint times(Bigint a,Bigint b);Bigint inttimes(Bigint a,int b);int main(void){ Bigint a,b,result;char ch1[MAXN],ch2[MAXN];int i,j,k; memset(a.n,0,sizeof(a.n)); memset(b.n,0,sizeof(b.n)); scanf("%s",ch1); scanf("%s",ch2); a=change(ch1); b=change(ch2); result=times(a,b); print(result); return 0;}Bigint change(char ch[]){ Bigint a; memset(a.n,0,sizeof(a.n)); int i,j,k=0;a.len=strlen(ch); if(ch[0]=='-') { a.digit=-1; a.len--;k++; } else a.digit=1; for(i=1;i<=a.len;i++) { a.n[i]=ch[a.len-i+k]-'0'; } return a;}void print(Bigint x){ int i; if(x.digit==-1) printf("-");for(i=x.len;i>=1;i--) { printf("%d",x.n[i]); } printf("\n");}Bigint addtion(Bigint a,Bigint b){ Bigint c; memset(c.n,0,sizeof(c.n));int i,j,k; for(i=1;i<=a.len||i<=b.len;i++) { c.n[i]+=a.n[i]+b.n[i]; if(c.n[i]>=10) { c.n[i]-=10; c.n[i+1]++; } }c.len=(compare(a,b)>0)?a.len:b.len; while(c.n[c.len+1]>0) { c.len++; } if(a.digit==1&&b.digit==1) c.digit=1; return c;}Bigint subtract(Bigint a,Bigint b){Bigint c,d;memset(c.n,0,sizeof(c.n));c.digit=1;int i,j,k;j=compare(a,b);if(j==0){c.len=1;c.digit=0;return c;}else if(j<0){d=a,a=b,b=d;c.digit=-1;}for(i=1;i<=a.len||i<=b.len;i++){c.n[i]+=(a.n[i]-b.n[i]);if(c.n[i]<0){c.n[i]+=10;c.n[i+1]--;}}c.len=(a.len>b.len)?a.len:b.len;while(c.n[c.len]==0){c.len--;}return c;}Bigint times(Bigint a,Bigint b){int i,j,k;Bigint c;memset(c.n,0,sizeof(c.n));c.digit=1;for(i=1;i<=a.len||i<=b.len;i++){c.n[i]+=a.n[i]*b.n[i];c.n[i+1]=c.n[i]/10;c.n[i]=c.n[i]%10;}c.len=i;while(c.n[c.len+1]>0){c.len++;c.n[c.len+1]=c.n[c.len]/10;c.n[c.len]=c.n[c.len]%10;}return c;}Bigint inttimes(Bigint a,int b){Bigint c;memset(b.n,0,sizeof(b.n));c.digit=a.digit;int i;for(i=1;i<=a.len;i++){c.n[i]=}}int compare(Bigint a,Bigint b){int i,j,k; if(a.len>b.len) { return 1; } else if(a.len<b.len) { return -1; } else { for(i=a.len;i>=1;i--) { if(a.n[i]>b.n[i]) return 1; else if(a.n[i]<b.n[i]) return -1; } } return 0;}
0 0
- 大整数操作(加、减和未完成的乘法)
- 实现大位整数的加/减/乘法的java工具类
- 大整数的加法、减法和乘法
- 大整数的加法和乘法运算
- 大整数的乘法
- 大整数的乘法
- 大整数的乘法
- 大整数的乘法
- 大整数的乘法
- 大整数的乘法
- 大整数的乘法(分治法)
- 大整数乘法和除法
- 分治法大整数乘法和普通大整数乘法
- 大整数的乘法问题
- 二进制的大整数乘法
- 大整数的乘法问题
- 两个大整数的乘法
- 大整数的乘法问题
- NYOJ17-单调递增最长子序列
- SharePoint品牌化和自定义--第一章节--SharePoint品牌化介绍(4)--基础HTML
- Huffman压缩
- Word Ladder
- POJ 2139 Six Degrees of Cowvin Bacon(任意两点最短路,Floyd)
- 大整数操作(加、减和未完成的乘法)
- 操作系统概论总结
- iOS入门实例文章目录
- 2.1.springMVC JSON操作
- linux 修改/tmp目录的大小
- 我喜欢的文本编辑工具
- 在wxWidgets中使用ActiveX
- InvalidateRect() 函数说明
- 大学男生ATM机前忘我照镜子 银行卡被人拔走