大整数相加 a+b 的c语言实现
终于来到我所期盼的高精度整数相加的题目了。这个题很经典,也算是一个很好的算法入门题吧。
如果是java的话,系统类库已经内置了BigInteger类,直接调用就可以很轻易地解决了。但是学习c的编写也是非常有意义的。
解题思路
1、首先用两个数组s1,s2临时存放输入的数据
2、输入以后将两个数组s1、s2以si[i]-'0'的方式把输入的字符串型数字转化为int型的数字。
注意转换的过程中,要倒过来存,以便相加的时候低位的对齐,从低位开始相加。
3、相加的过程:同位相加,相加的结果存放在num1[i]里。如果结果>10,num[i+1]要进位(+1),并且num1[i]存放结果-10(只存放个位)
4、输出时:相加的过程中变量i一直向后移,到了最后会停在max(len(s1),len(s2))+1的位置。如果前面的加法恰好在最高位也进1,此时num1[i]就不为零。此时就要把这个多出来的高位也输出。反则不需要输出。
其他详解看代码注释。
#include<stdio.h>
#include<string.h>
int main()
{
char s1[],s2[];
int num1[],num2[],len1,len2,i,j;
memset(num1,,sizeof(num1));
memset(num2,,sizeof(num2));
while(scanf("%s%s",s1,s2)!=EOF)
{
len1=strlen(s1);
len2=strlen(s2);
for(i=len1-,j=; i>=; --i) //从后往前处理大数字符串,把字符串变成数字组
{ num1[j]=s1[i]-'';
j++; }
for(i=len2-,j=; i>=; --i)
{
num2[j]=s2[i]-'';
j++; }
//相加的处理,把num2的数加到i1中。进位加1,原超数-10 for(i=; i<(len2>len1?len2:len1); i++)
{
num1[i]+=num2[i];
if(num1[i]>)
{
num1[i+]+=;
num1[i]-=;
}
}
if(num1[i])//如果最后一位不为0,把溢出来的那一位也输出。输出倒着输
for(j=i; j>=; j--)
printf("%d",num1[j]);
else for(j=i-; j>=; j--)//如果最后一位为0,最高位不需要输出。
printf("%d",num1[j]);
memset(num1,,sizeof(num1));
memset(num2,,sizeof(num2));
printf("\n");
}
return ;
}
大整数相加 a+b 的c语言实现的更多相关文章
- 大整数加减运算的C语言实现
目录 大整数加减运算的C语言实现 一. 问题提出 二. 代码实现 三. 效果验证 大整数加减运算的C语言实现 标签: 大整数加减 C 一. 问题提出 培训老师给出一个题目:用C语言实现一个大整数计算器 ...
- 华为"128为大整数相加"机试题
最近正直春招,偶尔接触到了华为的这道大整数相加的测试题,在网上找了一个算法,然后自己尝试进行了优化,最后也对memmove()函数效率有了进一步把握. #include <time.h># ...
- HDU 1002 A + B Problem II(大整数相加)
A + B Problem II Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u De ...
- SOJ 1002/1003/1004 大整数相加/相乘/相除
三个题目分别考察大整数相加相乘相除运算.如果按照传统算法是取一个长数组,之后进行模拟或者FFT来进行运算.但是相对繁琐. 后来昨天的青岛区域赛网赛1001,用到了JAVA的BigDecimal,于是反 ...
- HDOJ-1002 A + B Problem II (非负大整数相加)
http://acm.hdu.edu.cn/showproblem.php?pid=1002 输入的数都是正整数,比较好处理,注意进位. //非负大整数加法 # include <stdio.h ...
- 1024 Palindromic Number int_string转换 大整数相加
A number that will be the same when it is written forwards or backwards is known as a Palindromic Nu ...
- C++ string 实现大整数相加减
随意两个大整数的加减算法.可自己主动推断正负号.代码例如以下: #include <iostream> #include <vector> #include <cstri ...
- Javascript实现大整数加法
记得之前面试还被问到过用两个字符串实现两个大整数相加,当时还特别好奇好好的整数相加,为什么要用字符串去执行.哈哈,感觉当时自己还是很无知的,面试官肯定特别的无奈.今天在刷算法的时候,无意中看到了为什么 ...
- 华为OJ机试题目:两个大整数相乘(纯C语言实现两个大整数相乘,两种方法实现大数相乘)
题目描述: 输出两个不超过100位的大整数的乘积. 输入: 输入两个大整数,如1234567 123 输出: 输出乘积,如:151851741 样例输入: 1234567 123 样例输出: 1518 ...
随机推荐
- 如何批量下载网站中的超链接(一次性下载网页中所有可能的PDF文件)
最近公司在做工程项目,实现文件批量下载. 网上找了很久,发现网上的代码都有相似的问题,不过最终还是让我找到了一个符合的项目. 工程: 进行项目文件下载功能分析,弄清楚文件批量下载的原理,提供的数据支持 ...
- reload maven project' has encountered a proble" 问题
由于重重原因,我取消maven的下载(可能是jar包没有公服镜像).导致重新打开sts 时发生异常. 在网上寻找到资料,发现需要删除${workspace}\.metadata\.plugins\or ...
- 20169207《Linux内核原理及分析》第十三周作业
第一周作业::对Linux的基本知识进行了了解,并对基本操作进行熟悉和应用. 第二周作业::了解了冯诺依曼体系结构.各种寄存器的功能和汇编指令的作用和功能. 第三周作业::这周主要了解了Linux系统 ...
- noip第6课资料
- 数字签名、数字证书的原理以及证书的获得java版
数字签名原理简介(附数字证书) 首先要了解什么叫对称加密和非对称加密,消息摘要这些知识. 1. 非对称加密 在通信双方,如果使用非对称加密,一般遵从这样的原则:公钥加密,私钥解密.同时,一般一个密钥加 ...
- Python自动化开发 - Django【基础篇】
Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为: 大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能 ...
- Python自动化开发 - Python操作MySQL
本篇对于Python操作MySQL主要使用两种方式: 原生模块 pymsql ORM框架 SQLAchemy 一.pymysql pymsql是Python中操作MySQL的模块,其使用方法和mysq ...
- Android-WebView与本地HTML (Java调用--->HTML的方法)-(new WebView(this)方式)
之前的博客,Android-WebView与本地HTML (Java调用--->HTML的方法),是在 findViewById(R.id.webview);,来得到WebView, 此博客使用 ...
- hdu 1226 超级密码
超级密码 Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem D ...
- Kali Linux渗透测试实战 1.4 小试牛刀
目录 1.4 小试牛刀 1.4.1 信息搜集 whois查询 服务指纹识别 端口扫描 综合性扫描 1.4.2 发现漏洞 1.4.3 攻击与权限维持 小结 1.4 小试牛刀 本节作为第一章的最后一节,给 ...