题目地址:http://ac.jobdu.com/problem.php?pid=1198

题目描述:

实现一个加法器,使其能够输出a+b的值。

输入:

输入包括两个数a和b,其中a和b的位数不超过1000位。

输出:

可能有多组测试数据,对于每组数据,

输出a+b的值。

样例输入:
  1. 2 6
  2. 10000000000000000000 10000000000000000000000000000000
样例输出:
  1. 8
  2. 10000000000010000000000000000000
来源:
2010年华中科技大学计算机研究生机试真题
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. typedef struct biginteger{
  5. int digit[1000];
  6. int size;
  7. }BigInteger;
  8.  
  9. void StrToInt (char str[], BigInteger * big){
  10. int len = strlen (str);
  11. int a, b, c, d, i, j;
  12. i = 0;
  13. while (len >= 4){
  14. a = str[len - 4] - '0';
  15. b = str[len - 3] - '0';
  16. c = str[len - 2] - '0';
  17. d = str[len - 1] - '0';
  18. big->digit[i] = a * 1000 + b * 100 + c * 10 + d;
  19. len -= 4;
  20. ++i;
  21. }
  22. if (len > 0){
  23. big->digit[i] = 0;
  24. for (j=0; j<len; ++j){
  25. big->digit[i] = big->digit[i] * 10 + str[j] - '0';
  26. }
  27. ++i;
  28. }
  29. big->size = i;
  30. }
  31.  
  32. void Add (BigInteger * a, BigInteger * b){
  33. int carry = 0;
  34. int sum = 0;
  35. int len = (a->size > b->size) ? a->size : b->size;
  36. int i;
  37. for (i=0; i<len; ++i){
  38. sum = a->digit[i] + b->digit[i] + carry;
  39. carry = sum / 10000;
  40. a->digit[i] = sum % 10000;
  41. }
  42. if (carry > 0){
  43. a->digit[i] = carry;
  44. a->size = i + 1;
  45. }
  46. else{
  47. if (a->size < b->size)
  48. a->size = b->size;
  49. }
  50. }
  51.  
  52. int main(void){
  53. BigInteger a, b;
  54. char str1[1001], str2[1001];
  55. int index;
  56.  
  57. while (scanf ("%s%s", str1, str2) != EOF){
  58. memset (a.digit, 0, sizeof(a.digit));
  59. memset (b.digit, 0, sizeof(b.digit));
  60. a.size = b.size = 0;
  61. StrToInt (str1, &a);
  62. StrToInt (str2, &b);
  63. Add (&a, &b);
  64. index = a.size - 1;
  65. printf ("%d", a.digit[index]);
  66. --index;
  67. while (index >= 0){
  68. printf ("%04d", a.digit[index]);
  69. --index;
  70. }
  71. putchar ('\n');
  72. }
  73.  
  74. return 0;
  75. }

九度OJ1198 a+b 【高精度整数】的更多相关文章

  1. 九度OJ 1514 数值的整数次方【算法】

    题目地址:http://ac.jobdu.com/problem.php?pid=1514 题目描述: 给定一个double类型的浮点数base和int类型的整数exponent.求base的expo ...

  2. 九度OJ 1190:大整数排序 (大数运算、排序)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3219 解决:1467 题目描述: 对N个长度最长可达到1000的数进行排序. 输入: 输入第一行为一个整数N,(1<=N<=1 ...

  3. 九度oj 题目1084:整数拆分 清华大学2010年机试题目

    题目描述: 一个整数总可以拆分为2的幂的和,例如:7=1+2+4 7=1+2+2+2 7=1+1+1+4 7=1+1+1+2+2 7=1+1+1+1+1+2 7=1+1+1+1+1+1+1总共有六种不 ...

  4. 九度oj 题目1373:整数中1出现的次数(从1到n整数中1出现的次数)

    题目描述: 亲们!!我们的外国友人YZ这几天总是睡不好,初中奥数里有一个题目一直困扰着他,特此他向JOBDU发来求助信,希望亲们能帮帮他.问题是:求出1~13的整数中1出现的次数,并算出100~130 ...

  5. 九度OJ 1125:大整数的因子 (大数运算)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:974 解决:494 题目描述: 已知正整数k满足2<=k<=9,现给出长度最大为30位的十进制非负整数c,求所有能整除c的k. ...

  6. 九度oj 题目1063:整数和

    题目1063:整数和 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4043 解决:2638 题目描述: 编写程序,读入一个整数N.若N为非负数,则计算N到2N之间的整数和:若N为一个负数 ...

  7. 剑指Offer - 九度1508 - 把字符串转换成整数

    剑指Offer - 九度1508 - 把字符串转换成整数2014-02-06 23:46 题目描述: 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 输入: 输入可能包含多个测试样例 ...

  8. 剑指Offer - 九度1373 - 整数中1出现的次数(从1到n整数中1出现的次数)

    剑指Offer - 九度1373 - 整数中1出现的次数(从1到n整数中1出现的次数)2014-02-05 23:03 题目描述: 亲们!!我们的外国友人YZ这几天总是睡不好,初中奥数里有一个题目一直 ...

  9. 剑指Offer - 九度1514 - 数值的整数次方

    剑指Offer - 九度1514 - 数值的整数次方2013-11-30 00:49 题目描述: 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponen ...

随机推荐

  1. jQuery生成二维条形码 jquery.qrcode.js

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  2. Java 判断是否为汉字 判断是否为乱码 判断字符串是否为双整型数字 整数 数字

    /**  * 判断是否为汉字  *   * @param str  * @return  */ public static boolean isGBK(String str) {  char[] ch ...

  3. 【转】phpmyadmin万能密码漏洞

    影响版本:2.11.3 / 2.11.4 利用方法:用户名处写入‘localhost’@'@”则登录成功. (注意全部是英文标点符号,最后一个为英文双引号) 附上几个php爆绝对路径的办法: phpM ...

  4. centos上安装jdk环境

    老沙采用的环境是centos 6.5 64位服务器.在linux上安装jdk环境都很多中方式,这里讲解下手工进行安装并进行环境变量配置. 首先需要下载一个64位版本的linux,可以去oracle官网 ...

  5. ThinkPHP3.2.3新特性之:数据库设置

    ThinkPHP3.2.3版本数据库驱动采用PDO完全重写,配置和使用上面也比之前版本更加灵活和强大,我们来了解下如何使用. 首先,3.2.3的数据库配置信息有所调整,完整的数据库设置包括: /* 数 ...

  6. Aizu 2456 Usoperanto 贪心 拓扑排序

    Usoperanto Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.bnuoj.com/v3/contest_show.php?cid= ...

  7. C++11 std::bind std::function 高级使用方法

    从最基础的了解,std::bind和std::function /* * File: main.cpp * Author: Vicky.H * Email: eclipser@163.com */ # ...

  8. 【问题汇总】ListView的FooterView设置可见性的问题

    ListView的FooterView一般用来给用户展示一些提示信息. 正常情况下,是这么使用的.代码例如以下: // footer footerLayout = new PullLoadingLay ...

  9. iOS开发——网络编程OC篇&Socket编程

    Socket编程 一.网络各个协议:TCP/IP.SOCKET.HTTP等 网络七层由下往上分别为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 其中物理层.数据链路层和网络层通常被称作 ...

  10. S5PV210(TQ210)裸机编程

    本文很多其它的是教会大家怎样学习. 4.1    汇编学习 4.1.1 基础知识     4.1.2 ARM模拟器 4.2    S5PV210启动流程 4.3    点亮一个LED 4.4    串 ...