题目链接:点击打开链接

不足之处:我这样字写的速度太慢了,占用的内存也特别大

解决方案:

//大概50分钟
#include <stdio.h>
#include <stdlib.h>
#include <string.h>typedef struct {int cnt;short v[1000000];
} BIGINT;typedef struct{int cnt;int v[1000000];
} Stack;//将这个大整数定义为全局变量。BIGINT bigint;void solve();// 除以16,返回余数
int DIV16(BIGINT * bigint);void push(Stack * stack,int d){stack->v[stack->cnt++] = d;
}int pop(Stack * stack){if(stack->cnt > 0){return (stack->v[(stack->cnt--) - 1]);} else{return -1;}
}char record2SMALL[8][5]={"0","1","10","11","100","101","110","111"
};char record2[16][5] = {"0000","0001","0010","0011","0100","0101","0110","0111","1000","1001","1010","1011","1100","1101","1110","1111"
};char record16[17] = "0123456789ABCDEF";int main()
{int T;int k;scanf("%d",&T);k = 0;while(k<T){printf("case #%d:\n",k);solve();k++;}
}//1. 读入数据
//2. 先转化为16进制数字,保存在stack里面,然后从stack里面取出来,同时转化2进制的数字void solve(){static BIGINT bigint;static char str[1000001];static Stack stack;static Stack stackCOPY;int i,k;int tmp;scanf("%s",str);bigint.cnt = 0;stack.cnt = 0;stackCOPY.cnt = 0;//按照100进制存到BIGINT里面for(k = strlen(str) - 1; k >= 0;  k = k-2){if(k==0){bigint.v[bigint.cnt++]=str[k] - '0';} else {bigint.v[bigint.cnt++] = str[k]-'0' + (str[k-1] - '0') * 10;}}while(bigint.cnt>0){push(&stack,DIV16(&bigint));}stackCOPY = stack;//输出2进制tmp = pop(&stack);if(tmp<8){printf("%s",record2SMALL[tmp]);}else printf("%s",record2[tmp]);while(stack.cnt > 0){printf("%s",record2[pop(&stack)]);}printf(" ");while(stackCOPY.cnt>0){printf("%c",record16[pop(&stackCOPY)]);}printf("\n");
}int DIV16(BIGINT * bigint){int carry;int t;int k;carry = 0;if(bigint->v[bigint->cnt-1] < 16){carry = bigint->v[bigint->cnt-1];bigint->cnt--;}for(k = bigint->cnt-1;k>=0;k--){t = (bigint->v[k] + 100*carry);bigint->v[k] = t / 16;carry = t % 16;}return carry;
}

华师大 OJ 2966相关推荐

  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. TensorFlow object detection api------ssd_mobilenet使用
  2. 如何利用隐写术配合四个重定向连接到C2服务器
  3. python读文件代码-简单了解Python读取大文件代码实例
  4. C++ auto关键字
  5. MyBatis 源码解读-settingsAsProperties()
  6. 别为iptables日志付出太多-一种Linux防火墙优化方法
  7. svm matlab 画图,matlab 画图
  8. 有没有妈妈生了孩子一点不像自己的,觉得亏吗?
  9. .NET应用服务器(中间件)来到
  10. 【ICML2019】Set Transformer:置换不变的注意力神经网络框架
  11. C语言试题三十二之编写函数function,它的功能是:将一个字符串转换为一个整数(不得调用c语言提供的将字符串转换为整数的函数)。 1
  12. 树莓派上编写串口助手软件
  13. 计算机应用方向的毕业设计,计算机应用(动画方向)毕业设计.pdf
  14. vs试用期延长期到期_VS2017试用期到期后登录微软账户出现错误解决方法
  15. 合肥工业大学计组实验五
  16. EPLAN_采购列表的使用
  17. iVX移动端应用开发指导与规范v2.0
  18. ROS2_Foxy学习7——构建
  19. App中的私域流量,你知道吗?
  20. 一些查询国内外文献资料的实用网站

热门文章

  1. html5电子相册在线制作,Html5+jQuery+CSS制作相册小记录
  2. MATLAB | prim算法迷宫生成及其艺术渲染
  3. 实现自己的首字母索引导航列表(二)——拼音首字母分类列表
  4. 中国城市市区面积排行
  5. 今日份安利:什么软件可以录音翻译英语?
  6. 响铃:蜗牛读书“文”、网易云信“武”:游戏之外网易的AB面
  7. acm会议什么档次_盘点AI国际顶级会议
  8. Unreal Engine 虚幻引擎 接入第三方SDK
  9. Fritzing软件绘制Arduino面包板接线图传感器模块库文件015
  10. 大范围移动延时摄影后期去抖总结