华师大 OJ 3037
题目链接: 点击打开链接
对于尽管不是非常复杂的情况,我们也应该把问题分割成一个一个小的步骤,这样不仅解决的时候不会感到脑子一片空白,或者有千丝万缕的关系,而且差错的时候也十分方便。
最近的几道题目都非常训练我对抽象数据类型的认识。抽象数据类型差不多就是数据结构,其实结构这个词本身就有集合元素加上集合上的一些算法。有了这样的一套东西以后,解决问题的时候就会感到十分的得心应手。
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相关推荐
- 华师大 OJ 2822
题目链接:点击打开链接 这个OJ平台很傻,输出的时候,在一行的末尾少输出一个空格都可能会出错的. 代码 #include <stdio.h> #include <stdlib.h&g ...
- 华师大 OJ 3040
题目描述:点击打开链接 这道题目还是一样的方法.使用分布的思想方法就可以了. 代码: #include <stdio.h> #include <stdlib.h> #inclu ...
- 华师大 OJ 3053
题目链接:点击打开链接 这里要注意的是 1. long long 类型应该怎么输出 2. 题目的意思要准确地理解,有可能会出现11111111,这种边界情况,这个时候,这是要按照2进制来做的.所以要另 ...
- 华师大 OJ 3055
题目描述:点击打开链接 值得一提的是,对这里的题目描述要理解准确. #include <stdio.h> #include <stdlib.h> #include <st ...
- 华师大 OJ 3026
题目链接:点击打开链接 这个题目做了2个小时.这些代码的确是值得学习借鉴的. 解决方案: #include <string.h> #include <stdio.h>void ...
- 华师大 OJ 2897
题目描述:点击打开链接 值得一提的是:需要把这个用来输出的字符串最后手动补上一个0, tmp[count]='\0'; 解决方法: #include <stdio.h> #include ...
- 华师大 OJ 3024
题目描述:点击打开链接 值得一提的是,抽象数据类型定义好,然后把函数实现好. 解决代码: /****************************************************** ...
- 华师大 OJ 2850
题目描述:点击打开链接 这个是真的简单 解决方案: #include <stdio.h> #include <stdlib.h> #include <string.h&g ...
- 华师大 OJ 3023
题目描述:点击打开链接 值得一提的是:这个问题调用了递归的方法来解决问题 另外,一开始的时候,我在cmp_char里面直接使用了return strcmp(*((char*)a),*((char*)b ...
最新文章
- ADC0832双通道实现AD电压转换
- linux系统测试报告,[Linux-文件系统测试] -- Bonnie++测试
- dataObject可以去重吗java_python爬虫scrapy框架之增量式爬虫的示例代码
- MongoDB基本操作(增删改查)
- 一维数组和二维数组的区别_数组指针和指针数组的区别
- phonegap免费视频
- STM32出现HardFault故障的解决方法
- 控制台程序不显示dos窗口的方法
- 与速度对偶的角速度系公式
- [02.20][中国][人再囧途之泰囧][HD-RMVB.720p.国语中字][2012年喜剧]
- Java_socket通信基础补充
- 线性与非线性规划:随机方向法
- 解决微信小程序“app.json: [“workers“] 字段需为 目录“错误及worker的使用
- Linux常见压缩工具
- 华为设备DHCP snooping配置
- android性能优化透明,Android性能优化-图片篇
- 7-45 循环结构7:求x+x2+x3+...+xn的值 (50 分) 输入整数x,n(x与n均为1到8之间的整数),输出x1+x2+x3+...+xn(第二个数字表示指数)的值,不能使用pow函数
- USB启动U盘 计算机找不到,电脑开机快捷启动键找不到u盘怎么办
- 初始C语言——梦开始的地方
- Redis 事件循环函数serverCron