百练_2736大整数减法(大数相减)
来源:互联网 发布:淘宝网虚假交易处罚 编辑:程序博客网 时间:2024/05/16 09:26
求两个大的正整数相减的差。
99999999999999999999999999999999999999999999999999
样例输出
9999999999999999999999990000000000000
C语言中最大的整型数据类型是long类型,占4个字节
C中短整型和整型均占2个字节,取值范围是 -32768 ~~~ 32767
长整型占4个字节,取值范围是 -2147483648 ~~~~ 2147483647
如果是无符号数的话,可以表示的数据就是
短整型和 整型: 0--- 65535
长整型: 0---4294967295
C中短整型和整型均占2个字节,取值范围是 -32768 ~~~ 32767
长整型占4个字节,取值范围是 -2147483648 ~~~~ 2147483647
如果是无符号数的话,可以表示的数据就是
短整型和 整型: 0--- 65535
长整型: 0---4294967295
当数据超过能长整型所能表示的范围以后,如果继续做加减会使得到的结果出错,所以这时候我们就需要用到数组来存储位数,用最简单的位数相加来对大数的各个位数做加法运算
思路:先用两个char类型的字符串类型来存储大数各个位数,因为char字符型不方便做加法位运算,所以接下来就把char类型数组转换为int类型数组,在int类型上数组做减法位运算,然后把int类型数组上的各个数打印出来就是最后的结果
例如题目所示
9999999999999999999999999999999999999
- 0000000000000000000000009999999999999
-----------------------------------------------------------------------
9999999999999999999999990000000000000
#include<stdio.h>#include<string.h>int main(){int i,j,str1,str2,k=0; int a1[255],a2[255],a3[255]; char c1[255],c2[255]; //用字符方式存储两个大数的数值 for(i=0;i<255;i++){a1[i]=0; //把int数组内所有数内置为0 a2[i]=0;}scanf("%s",c1);scanf("%s",c2); //用char类型c1,c2存储大数的值 str1=strlen(c1); //用str1表示读入第一个数的长度 str2=strlen(c2);j=0; for(i=str1-1;i>=0;i--) //将大数c1从char类型转化为int类型当中 a1[j++]=c1[i]-'0'; j=0;for(i=str2-1;i>=0;i--) //将大数c2从char类型转化为int类型当中 a2[j++]=c2[i]-'0'; for(i=0;i<255;i++) { a1[i]-=a2[i]; if(a1[i]<0) //出现需要向前一位数借1的情况 { a1[i]+=10; //相同位作减法,前减位数小于后减位数向前借"1" a1[i+1]--; } } j=0; //例如a1相减后的结果是1234 for(i=254;i>=0;i--) //a1表示就是1234000...000 a3[j++]=a1[i]; //a3变化后为000...0001234 //下边目的就是想办法把这些前置的0给消除 for(i=0;i<255;i++) {if(a3[i]!=0) k=1; //当从第一位数一直到非0的数我们都不需要打印 if(k==1) printf("%d",a3[i]);]);//当第一位非0的数出现时候我们把剩下的数打印出来 }if(k==0) printf("0"); //避免出现两个数相同捡的为0无输出的情况 printf("\n");return 0;}
阅读全文
1 0
- 百练_2736大整数减法(大数相减)
- 百练2736 大整数减法
- Pku百练2736(大整数减法)
- 百练2736/noi 11:大整数减法
- 百练_2981大整数加法(大数相加)
- 百练_2980大整数乘法(大数相乘)
- 整数大数减法
- 大整数减法
- 大整数减法
- 大整数减法
- 大整数减法
- 大整数加法减法
- 大整数减法
- 大整数减法模板
- 大整数减法
- 大整数减法
- 大整数的减法
- 大整数-减法
- ios 分离出字符串中的数字
- (转载)JAVA设计模式之单例模式
- 大商创短信宝短信插件
- AppCompatActivity的魔术——如何做到适配新控件
- 前端面试题集锦一
- 百练_2736大整数减法(大数相减)
- hdu 1074 Doing Homework (状压dp)
- 页面显示部分文字,title再显示一个提示
- struts2配置文件中的method={1}详解
- python中向列表中添加字典时,出现前面的覆盖了后面的
- 图文详解远程部署ASP.NET MVC 5项目
- Netty ByteBuf 零拷贝
- javaweb时间动态显示
- 最大似然估计的缺陷 —— 方差和均值的 bias