高精度整数 1
来源:互联网 发布:女明星的淘宝店铺 编辑:程序博客网 时间:2024/04/28 23:03
/*
高精度整数
题目1198:a+b
题目描述:
实现一个加法器,使其能够输出a+b的值。
输入:
输入包括两个数a和b,其中a和b的位数不超过1000位。
输出:
可能有多组测试数据,对于每组数据,
输出a+b的值。
样例输入:
2 6
10000000000000000000 10000000000000000000000000000000
样例输出:
8
10000000000010000000000000000000
*/
#include <stdio.h>
#include <string.h>
struct biginteger{//高精度整数结构体
int digit[1000];//按四位数一个单位保存数值
int size;//下一个我们未使用的数组单元
void init(){//对结构体的初始化
for(int i=0;i<1000;i++) digit[i] = 0;//所有数位清0
size = 0;//下一个未使用数组单元为0,即没有一个单元被使用
}
void set(char str[]){//从字符串中提取整数
init();//对结构体初始化
int l = strlen(str);//计算字符串长度
for(int i=l-1,j=0,t=0,c=1;i>=0;i--){
//从最后一个字符开始倒序遍历字符串,j控制每4个字符转换为一个数字存入
//数组,t临时保存字符转换为数字的中间值,c表示当前位的权重,按1,10,
//100,1000顺序变化
t += (str[i] - '0')*c;//计算这个四位数中当前字符代表的数字,即
//数字乘以当前位权重
j++;//当前转换字符数增加
c *= 10;//计算下一位权重
if(j==4 || i==0){//若已经连续转换四个字符,或者已经到达最后一个字符
digit[size++] = t;//将这四个字符代表的四位数存入数组,size
//移动到下一个数组单位
j = 0;//重新开始计算下4个字符
t = 0;//临时变量清0
c = 1;//权重变为1
}
}
}
void output(){//将该高精度整数输出
int i;
for(i=size-1;i>=0;i--){
if(i != size - 1) printf("%04d",digit[i]);
//若当前输出的数字不是最高位数字,用%04的输出前导0,即当前
//数字不足4位时用0补充,如输出110001的后四位数
else printf("%d",digit[i]);//若是最高位,则无需输出前导零
}
printf("\n");//换行
}
biginteger operator + (const biginteger &A) const{//加法运算符
int i;
biginteger ret;//返回值,即两数相加的结果
ret.init();//对其初始化
int carry = 0;//进位,初始值为0
for(i=0;i<A.size || i<size;i++){
int tmp = A.digit[i] + digit[i] + carry;
//计算两个整数当前位以及来自低位的进位和
carry = tmp / 10000;//计算该位的进位
tmp %= 10000;//去除进位部分,取后四位
ret.digit[ret.size++] = tmp;//保存该位结果
}
if(carry != 0){//计算结束后若最高位有进位
ret.digit[ret.size++] = carry;//保存该进位
}
return ret;//返回
}
}a,b,c;
char str1[1002], str2[1002];
int main(){
while(scanf("%s%s",&str1,&str2) != EOF){//输入
a.set(str1);
b.set(str2);//用两个字符串分别设置两个高精度整数
c = a + b;//计算它们的和
c.output();//输出
}
return 0;
}
高精度整数
题目1198:a+b
题目描述:
实现一个加法器,使其能够输出a+b的值。
输入:
输入包括两个数a和b,其中a和b的位数不超过1000位。
输出:
可能有多组测试数据,对于每组数据,
输出a+b的值。
样例输入:
2 6
10000000000000000000 10000000000000000000000000000000
样例输出:
8
10000000000010000000000000000000
*/
#include <stdio.h>
#include <string.h>
struct biginteger{//高精度整数结构体
int digit[1000];//按四位数一个单位保存数值
int size;//下一个我们未使用的数组单元
void init(){//对结构体的初始化
for(int i=0;i<1000;i++) digit[i] = 0;//所有数位清0
size = 0;//下一个未使用数组单元为0,即没有一个单元被使用
}
void set(char str[]){//从字符串中提取整数
init();//对结构体初始化
int l = strlen(str);//计算字符串长度
for(int i=l-1,j=0,t=0,c=1;i>=0;i--){
//从最后一个字符开始倒序遍历字符串,j控制每4个字符转换为一个数字存入
//数组,t临时保存字符转换为数字的中间值,c表示当前位的权重,按1,10,
//100,1000顺序变化
t += (str[i] - '0')*c;//计算这个四位数中当前字符代表的数字,即
//数字乘以当前位权重
j++;//当前转换字符数增加
c *= 10;//计算下一位权重
if(j==4 || i==0){//若已经连续转换四个字符,或者已经到达最后一个字符
digit[size++] = t;//将这四个字符代表的四位数存入数组,size
//移动到下一个数组单位
j = 0;//重新开始计算下4个字符
t = 0;//临时变量清0
c = 1;//权重变为1
}
}
}
void output(){//将该高精度整数输出
int i;
for(i=size-1;i>=0;i--){
if(i != size - 1) printf("%04d",digit[i]);
//若当前输出的数字不是最高位数字,用%04的输出前导0,即当前
//数字不足4位时用0补充,如输出110001的后四位数
else printf("%d",digit[i]);//若是最高位,则无需输出前导零
}
printf("\n");//换行
}
biginteger operator + (const biginteger &A) const{//加法运算符
int i;
biginteger ret;//返回值,即两数相加的结果
ret.init();//对其初始化
int carry = 0;//进位,初始值为0
for(i=0;i<A.size || i<size;i++){
int tmp = A.digit[i] + digit[i] + carry;
//计算两个整数当前位以及来自低位的进位和
carry = tmp / 10000;//计算该位的进位
tmp %= 10000;//去除进位部分,取后四位
ret.digit[ret.size++] = tmp;//保存该位结果
}
if(carry != 0){//计算结束后若最高位有进位
ret.digit[ret.size++] = carry;//保存该进位
}
return ret;//返回
}
}a,b,c;
char str1[1002], str2[1002];
int main(){
while(scanf("%s%s",&str1,&str2) != EOF){//输入
a.set(str1);
b.set(str2);//用两个字符串分别设置两个高精度整数
c = a + b;//计算它们的和
c.output();//输出
}
return 0;
}
0 0
- 高精度整数 1
- 高精度整数除法
- 高精度整数运算
- 高精度整数除法
- 高精度 大整数加法
- 高精度整数加法
- 高精度整数加法
- 高精度大整数加法
- 高精度整数模板
- 高精度整数模板(转)
- 高精度整数加法
- 高精度整数的四则运算
- 整数高精度乘法
- 高精度非负整数
- 整数高精度之加减法
- 高精度大整数类
- 高精度整数 2
- 高精度整数 3
- Centos 6 x86 minimal搭建SS服务
- Gatling 官网教程翻译之 Simulation Setup
- POJ 2762 Going from u to v …(强连通分量+拓扑排序)
- 人的思想的成长过程是一个潜意识不断成长并替代思维完成细节工作的过程
- 装饰者模式
- 高精度整数 1
- java国际化——消息格式化+文本文件和字符集
- 【 bzoj 1014 】 [JSOI2008]火星人prefix
- CLLocation定位
- poj3614 二分图最大匹配 or 贪心
- 3DES加密—java/OC
- springmvc(十三)springmvc注解开发-springmvc参数绑定-包装类型pojo参数绑定
- 基于PetShop的数据可视化网站(二):缓存依赖
- cvCalcEMD2() 直方图匹配