题目链接:点击打开链接

值得一提的是,我觉得这道题目是我第一次完全靠自己的力量,按照数据结构的思路做出来的。

其实换成数据结构+算法的思路在用C语言来解决问题还是能简化思考的复杂度。

因为人的脑子很笨,无法一下子解决一团问题,需要将其分解。

那么设计好这里的数据结构,其实运行在数据结构上的算法也是非常的重要的。正是有了那些小小的配套的方法,才让思考的过程显得格外的清晰。

解决方案

/******************************************************************************/
/*                                                                            */
/*  DON'T MODIFY main() function anyway!                                      */
/*                                                                            */
/******************************************************************************/
#include <stdio.h>
#include <string.h>
//把个位数放在v[0],十位数放在v[1]
//特殊数据:数据0,表示为{0,{0}},
typedef struct {int cnt;int v[101];
} BIGINT;void solve(); /* write function solve() to process one case of the problem    */
void init(){}
void ADD01(BIGINT *n,int bin);
void MUL2(BIGINT *n);
void DIV2(BIGINT * n);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. 十进制n-->二进制数bin
//2. 二进制bin倒置-->binReverse
//3. binReverse-->倒置
//要自己设计大整数类型void solve(){  //10char str[102];int bin[334];int countBin;int flag;BIGINT n;int i;scanf("%s",str);if(strlen(str)==1 && str[0] == '0'){ printf("0\n");return;}for(i=0;i<strlen(str);i++){n.v[i] = str[strlen(str) - 1 -i]-'0';}n.cnt = strlen(str);countBin = 0;while(n.cnt>0){bin[countBin++] = n.v[0] % 2;   //bin[0]存放的是原本的二进制的最低位DIV2(&n);                       //bin一共有countBin个二进制位,位bin[0],bin[1],...,bin[countBin-1]}flag = 0;for(i=0;i < countBin;i++){if(bin[i] != 0)   break;}flag = countBin-1;while(flag){if(bin[flag]!=0){break;}else flag--;}for(;i <=flag ;i++){MUL2(&n);ADD01(&n,bin[i]);}for(i=0;i<n.cnt-1;i++){printf("%d",n.v[n.cnt - 1 - i]);}printf("%d\n",n.v[n.cnt - 1 - i]);
}//大整数加0 or 1
//大整数乘以2
//大整数除以2void ADD01(BIGINT *n,int bin){int i;int t;int carry;if(bin!=0){  //bin == 1if(n->cnt == 0) n->cnt=1,n->v[0] = 1;else{carry = bin;for(i=0;i < n->cnt; i++){t = n->v[i] + carry;n->v[i] = t % 10;carry = t / 10;}if(carry>0){n->v[n->cnt++] = carry;}}}
}void MUL2(BIGINT *n){int i;int t;int carry;if(n->cnt != 0){carry = 0;for(i=0;i<n->cnt;i++){t = n->v[i] * 2  + carry;n->v[i] = t % 10;carry = t / 10;}if(carry>0){n->v[n->cnt++] = carry;}}
}void DIV2(BIGINT * n){ //  {2,{3,4} }int i;int t;int cnt = n->cnt;int carry;if(n->v[n->cnt-1] == 1){carry = 1;n->cnt--;} else{t = n->v[n->cnt-1];n->v[n->cnt-1] = t / 2;carry = t % 2;}for(i=cnt-2;i>=0;i--){t = ( n->v[i] + carry*10 );n->v[i] = t / 2;carry = t % 2;}
}

华师大 OJ 3031相关推荐

  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. python获取天气分析_Python爬取南京市往年天气预报,使用pyecharts进行分析
  2. SOC(网络安全管理平台)
  3. 为什么比尔盖茨,马斯克、霍金都提醒你:要警惕人工智能?(上)
  4. python numpy官网_Python Numpy 教程(上)
  5. java 使用.aar_java - 使用grad解析aar库的传递依赖性
  6. linux android gradle构建机器 error while loading shared libraries: libz.so.1: cannot open shared object
  7. 西澳大学商科专业排名_澳洲西澳大学优势专业排名多少
  8. swarm 本地管理远程_带有WildFly Swarm的远程JMS
  9. linux查看php命令目录权限,PHP执行linux命令mkdir权限问题
  10. prestashop后台如何删除订单
  11. UML设计(团队作业)
  12. SubSonic学习(二)
  13. 基于Java平台实现发送短信功能
  14. ALG:应用层网关(防火墙)
  15. 解密Animate.css之CSS3动画实现方式大全源码(6星级)
  16. python基础_字典_列表_元组考试
  17. 16个小技巧让你每天都进步(附:提高效率的100条建议)
  18. for await of使用
  19. 硬盘质保、保修期网上查询
  20. Android点9图片被放大的问题

热门文章

  1. 网页空间相册制作代码
  2. 蓝牙路由器物联网优势是什么?
  3. SMT贴片机种类和速度
  4. 保护小学生这件事上,腾讯拿出全球最严防沉迷措施
  5. nysit 42 欧拉通路(一笔画图)
  6. 深度学习十年发展回顾:里程碑论文汇编
  7. 日语中 に、で 用法总结
  8. java开发转行电气自动化
  9. 从BIO到Netty的演变
  10. 爬虫能有多简单?看我三分钟教会你爬取百万图片。