题目链接: 点击打开链接

对于尽管不是非常复杂的情况,我们也应该把问题分割成一个一个小的步骤,这样不仅解决的时候不会感到脑子一片空白,或者有千丝万缕的关系,而且差错的时候也十分方便。

最近的几道题目都非常训练我对抽象数据类型的认识。抽象数据类型差不多就是数据结构,其实结构这个词本身就有集合元素加上集合上的一些算法。有了这样的一套东西以后,解决问题的时候就会感到十分的得心应手。

1. 定义两个大整数的抽象数据类型
2. 读入数据,用字符串读进来,然后转换一下存到大整数里面。
3. 进行加法并且将得到的和放在第一个参数里面。
4. 输出

解决方案:

//13:37-->14:15/******************************************************************************/
/*                                                                            */
/*  DON'T MODIFY main() function anyway!                                      */
/*                                                                            */
/******************************************************************************/
#include <stdio.h>
#include <string.h>void solve(); /* write function solve() to process one case of the problem    */
void init(){}
int main()
{  int i,t; init();scanf("%d\n",&t);for (i=0;i<t;i++){ printf("case #%d:\n",i);solve();}return 0;
}//1. 定义两个大整数的抽象数据类型
//2. 读入数据,用字符串读进来,然后转换一下存到大整数里面。
//3. 进行加法并且将得到的和放在第一个参数里面。
//4. 输出typedef struct {int cnt;int v[210];
} BIGINT;void ADD_BIGINT(BIGINT *a, BIGINT *b){BIGINT tmp;BIGINT A,B;int k;int t;int cnt_a,cnt_b;int max,min;int carry;cnt_a = a->cnt;cnt_b = b->cnt;max = cnt_a > cnt_b ? cnt_a : cnt_b;min = cnt_a < cnt_b ? cnt_a : cnt_b;carry = 0;tmp.cnt = 0;//把a,b加起来放到tmp里面,然后把tmp赋值给*a;if(a->cnt < b->cnt){a->cnt = b->cnt;for(k=cnt_a;k<cnt_b;k++){a->v[k] = 0;}} else if(a->cnt > b->cnt){b->cnt = a->cnt;for(k=cnt_b;k<cnt_a;k++){b->v[k] = 0;}}cnt_a = a->cnt;cnt_b = b->cnt;for(k = 0; k < cnt_a;k++){t = a->v[k] + b->v[k] +carry;tmp.v[tmp.cnt++] = t % 16;carry = t / 16;}if(carry > 0){tmp.v[tmp.cnt++] = carry;}*a = tmp;}void solve(){char transformN2C[17] = "0123456789ABCDEF";  //transform from number to charchar transformC2N[128];//transform char to number;BIGINT a,b;int k;char str_a[210],str_b[210];//初始化for(k=0;k<=9;k++){transformC2N['0'+k] = k;}for(k='A';k<='F';k++){transformC2N[k] = k - 'A' + 10;}a.cnt = 0;b.cnt = 0;scanf("%s %s",str_a,str_b);for(k=strlen(str_a)-1; k >= 0;k--){a.v[a.cnt++] = transformC2N[str_a[k]];}for(k=strlen(str_b)-1; k >= 0;k--){b.v[b.cnt++] = transformC2N[str_b[k]];}ADD_BIGINT(&a,&b);for(k=a.cnt-1;k>=0;k--){printf("%c",transformN2C[a.v[k]]);}printf("\n");
}

华师大 OJ 3037相关推荐

  1. 华师大 OJ 2822

    题目链接:点击打开链接 这个OJ平台很傻,输出的时候,在一行的末尾少输出一个空格都可能会出错的. 代码 #include <stdio.h> #include <stdlib.h&g ...

  2. 华师大 OJ 3040

    题目描述:点击打开链接 这道题目还是一样的方法.使用分布的思想方法就可以了. 代码: #include <stdio.h> #include <stdlib.h> #inclu ...

  3. 华师大 OJ 3053

    题目链接:点击打开链接 这里要注意的是 1. long long 类型应该怎么输出 2. 题目的意思要准确地理解,有可能会出现11111111,这种边界情况,这个时候,这是要按照2进制来做的.所以要另 ...

  4. 华师大 OJ 3055

    题目描述:点击打开链接 值得一提的是,对这里的题目描述要理解准确. #include <stdio.h> #include <stdlib.h> #include <st ...

  5. 华师大 OJ 3026

    题目链接:点击打开链接 这个题目做了2个小时.这些代码的确是值得学习借鉴的. 解决方案: #include <string.h> #include <stdio.h>void ...

  6. 华师大 OJ 2897

    题目描述:点击打开链接 值得一提的是:需要把这个用来输出的字符串最后手动补上一个0, tmp[count]='\0'; 解决方法: #include <stdio.h> #include ...

  7. 华师大 OJ 3024

    题目描述:点击打开链接 值得一提的是,抽象数据类型定义好,然后把函数实现好. 解决代码: /****************************************************** ...

  8. 华师大 OJ 2850

    题目描述:点击打开链接 这个是真的简单 解决方案: #include <stdio.h> #include <stdlib.h> #include <string.h&g ...

  9. 华师大 OJ 3023

    题目描述:点击打开链接 值得一提的是:这个问题调用了递归的方法来解决问题 另外,一开始的时候,我在cmp_char里面直接使用了return strcmp(*((char*)a),*((char*)b ...

最新文章

  1. ADC0832双通道实现AD电压转换
  2. linux系统测试报告,[Linux-文件系统测试] -- Bonnie++测试
  3. dataObject可以去重吗java_python爬虫scrapy框架之增量式爬虫的示例代码
  4. MongoDB基本操作(增删改查)
  5. 一维数组和二维数组的区别_数组指针和指针数组的区别
  6. phonegap免费视频
  7. STM32出现HardFault故障的解决方法
  8. 控制台程序不显示dos窗口的方法
  9. 与速度对偶的角速度系公式
  10. [02.20][中国][人再囧途之泰囧][HD-RMVB.720p.国语中字][2012年喜剧]
  11. Java_socket通信基础补充
  12. 线性与非线性规划:随机方向法
  13. 解决微信小程序“app.json: [“workers“] 字段需为 目录“错误及worker的使用
  14. Linux常见压缩工具
  15. 华为设备DHCP snooping配置
  16. android性能优化透明,Android性能优化-图片篇
  17. 7-45 循环结构7:求x+x2+x3+...+xn的值 (50 分) 输入整数x,n(x与n均为1到8之间的整数),输出x1+x2+x3+...+xn(第二个数字表示指数)的值,不能使用pow函数
  18. USB启动U盘 计算机找不到,电脑开机快捷启动键找不到u盘怎么办
  19. 初始C语言——梦开始的地方
  20. Redis 事件循环函数serverCron

热门文章

  1. 2.5 纳什均衡的存在性
  2. ORB-SLAM2系列第六章—— 跟踪线程
  3. ORB-SLAM2跑TUM RGBD数据集时灰屏卡住
  4. 照片损坏了无法显示还能修复么?
  5. lua小技巧——lua全局变量的检测
  6. 后端面试知识点总结 数据库 mysql
  7. SpringBoot + Sharding JDBC,一文搞定分库分表、读写分离
  8. 杰理之关于608n省晶振模式使用PWM_LED的注意事项【篇】
  9. 算法工程师与软件开发工程师的区别
  10. 区分网络管理员和网络工程师