华师大 OJ 3037
来源:互联网 发布:局域网分析软件 编辑:程序博客网 时间:2024/05/01 04:42
题目链接: 点击打开链接
对于尽管不是非常复杂的情况,我们也应该把问题分割成一个一个小的步骤,这样不仅解决的时候不会感到脑子一片空白,或者有千丝万缕的关系,而且差错的时候也十分方便。
最近的几道题目都非常训练我对抽象数据类型的认识。抽象数据类型差不多就是数据结构,其实结构这个词本身就有集合元素加上集合上的一些算法。有了这样的一套东西以后,解决问题的时候就会感到十分的得心应手。
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 char char 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");}
0 0
- 华师大 OJ 3037
- 华师大 OJ 2896
- 华师大 OJ 2947
- 华师大 OJ 3036
- 华师大 OJ 3055
- 华师大 OJ 3059
- 华师大 OJ 2822
- 华师大 OJ 2893
- 华师大 OJ 3031
- 华师大 OJ 3053
- 华师大 OJ 1147
- 华师大 OJ 2966
- 华师大 OJ 2876
- 华师大 OJ 3040
- 华师大 OJ 3024
- 华师大 OJ 2878
- 华师大 OJ 3023
- 华师大 OJ 3026
- 【Java学习笔记】接口 抽象类 抽象方法
- [IIS] Attempt to load Oracle client libraries threw BadImageFormatException.
- [IIS] Attempt to load Oracle client libraries threw BadImageFormatException.
- vue-resource
- opencv-从设备获取视频并且一帧一帧的保存下来
- 华师大 OJ 3037
- Java中Volatile关键字详解
- 深度学习之四大经典CNN技术浅析
- IndexQuery Class Architecture
- 代码优化3
- MySQL 5.7中sys是一个MySQL自带的系统库
- 每天一个 Linux 命令(44):top命令
- Spark性能优化指南
- 学习Javascript闭包(Closure)