大数加法之C语言函数法(只有正数版)
由于某些原因,我于今天2017-4-19将我的博文搬到博客园了,以后我就在这里扎根了。
之前想过在博客写文章方便日后复习,但一直未能实现,所以,现在这篇是我个人人生中第一篇博客,所以写博客完全没经验,可能会有些啰嗦,读者将就着看吧,哈哈。由于本人还是学生,所以有理解不对的地方,请各位大神指出,让我,让后面看到此文章的人共同进步,谢谢,本文适合新手看,个人觉得思路挺清晰,大神可飘过,勿喷。
大数加法,可以模拟小学的加法,主要是几步:由字符型转换成整形数组,反转相加,处理进位情况,再转换回字符型输出答案。废话不多说了,代码如下:
# include<stdio.h>
# include<string.h>
char * sum(char *a,char*b)//对C语言来说返回一个字符指针,因为我们的结果是以字符串形式输出
{
int s[1000]= {0};//用整形数组存储数字,记得清零
char c[1000];//这将是我们用来输出的数组,后面直接返回数组名 c即可
int i,j,maxlen,d;
int la=strlen(a),lb=strlen(b);
la>lb?maxlen=la:maxlen=lb;//这里是要找出两个数字的最高位
for(j=la-1; j>=0; j--)//将字符转换成数字并反转存进整形数组
s[la-1-j]+=a[j]-'0';
for(j=lb-1; j>=0; j--)//同上
s[lb-1-j]+=b[j]-'0';
for(i=0,d=0; i<maxlen; i++)//d是进位的数,十进制一般都是1了。
{
s[i]+=d;//从低位开始
d=s[i]/10;//如果两数相加超过十 d就会变1
s[i]%=10;//然后此时s[i]存的就是该位上的数字
}
if(d>0)//处理最高位
s[maxlen++]+=d;
for(i=maxlen-1; i>=0; i--)//再将整形数组 反转转换为字符数组
c[maxlen-1-i]=s[i]+'0';
c[maxlen]='\0';//最后面加上结束符
return c;//返回字符指针
}
int main(void)
{
char a[1000],b[1000];
char *c;
while(scanf("%s %s",a,b))
{
c=sum(a,b);
printf("%s\n",c);
}
return 0;
}
以上就是鄙人之见
测试效果如下:

大数加法之C语言函数法(只有正数版)的更多相关文章
- C语言 · 大数加法
算法提高 大数加法 时间限制:1.0s 内存限制:256.0MB 问题描述 输入两个正整数a,b,输出a+b的值. 输入格式 两行,第一行a,第二行b.a和b的长度均小于1000位. ...
- 玲珑杯1007-A 八进制大数加法(实现逻辑陷阱与题目套路)
题目连接:http://www.ifrog.cc/acm/problem/1056 DESCRIPTION Two octal number integers a, b are given, and ...
- C语言函数指针基础
本文写的非常详细,因为我想为初学者建立一个意识模型,来帮助他们理解函数指针的语法和基础.如果你不讨厌事无巨细,请尽情阅读吧. 函数指针虽然在语法上让人有些迷惑,但不失为一种有趣而强大的工具.本文将从C ...
- Go语言 函数,工程管理
Go语言 函数,工程管理 1.无参无返回值函数的使用 package main import "fmt" func main() { // 无参无返回值函数的调用:函数名() fu ...
- 05. Go 语言函数
Go 语言函数 函数是组织好的.可重复使用的.用来实现单一或相关联功能的代码段,其可以提高应用的模块性和代码的重复利用率. Go 语言支持普通函数.匿名函数和闭包,从设计上对函数进行了优化和改进,让函 ...
- 从linux0.11中起动部分代码看汇编调用c语言函数
上一篇分析了c语言的函数调用栈情况,知道了c语言的函数调用机制后,我们来看一下,linux0.11中起动部分的代码是如何从汇编跳入c语言函数的.在LINUX 0.11中的head.s文件中会看到如下一 ...
- 51nod 1005 大数加法
#include<iostream> #include<string> using namespace std; #define MAXN 10001 },b[MAXN]={} ...
- c#大数加法
在C#中,我们经常需要表示整数.但是,c#的基本数据类型中,最大的long也只能表示-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807之间的数 ...
- C语言(函数)学习之strstr strcasestr
C语言(函数)学习之[strstr]&[strcasestr]一.strstr函数使用[1]函数原型char*strstr(constchar*haystack,constchar*needl ...
随机推荐
- python基础6 迭代器 生成器
可迭代的:内部含有__iter__方法的数据类型叫可迭代的,也叫迭代对象实现了迭代协议的对象 运用dir()方法来测试一个数据类型是不是可迭代的的. 迭代器协议是指:对象需要提供next方法,它要么返 ...
- Leetcode题解(十七)
48.Rotate Image 题目: 分析:题目意思很简单,就是将一个n*n的矩阵顺时针旋转90度. 这道题难度不大,按照旋转的过程走一遍即可.代码如下: class Solution { publ ...
- KMP (next数组的性质及证明)
性质:如果len%(len-next[len-1])==0,则字符串中必存在最小循环节,且循环次数即为len/(len-next[len-1]); 证明:在前len个字符组成的字符串,存在最小循环节k ...
- 用git上传本地文件到github
1.在自己的github账号下新建仓库--------得到github仓库地址 2.本地安装git---在将要克隆的文件夹下 右击点击Git Bash Here 3.输入命令 $ git clone ...
- ASP.NET Core的身份认证框架IdentityServer4(9)-使用OpenID Connect添加用户认证
OpenID Connect OpenID Connect 1.0是OAuth 2.0协议之上的一个简单的身份层. 它允许客户端基于授权服务器执行的身份验证来验证最终用户的身份,以及以可互操作和类似R ...
- AutoMapper IIS回收引发的 未将对象引用设置到对象实例
一.前言 最近使用AutoMapper的时候,一段时间久会产生System.NullReferenceException:未将对象引用设置到对象的实例.这个问题.后来通过测试,发现部署在IIS上的站点 ...
- Container With Most Water 容器最大水容量
描述 Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai ...
- oracle数据库表实现主键自增功能
有关oracle中自增序列sequence+触发器trigger:实现数据表TABDATA_LIVE_CYCLE中的主键id的自增. CREATE SEQUENCE TABDATA_LIVE_CYCL ...
- java 虚拟机的类加载机制
Java 虚拟机的类加载机制 关于类加载机制: 虚拟机把描述类的数据从Class 文件加载到内存,并对数据进行效验.转换解析和初始化,最终 形成可以被虚拟机直接使用的Java 类型,就是虚拟机的类 ...
- 前端面试题(3) cookie,sessionStorage和localStorage的区别
cookie是网站为了标示用户身份存在用户本地终端上的数据(经过加密). cookie数据时钟在同源的http请求中携带(即使不需要),即会在浏览器和服务器之间传递. seeeionStorage和l ...