OJ_1138 进制转换
来源:互联网 发布:solaris scp linux 编辑:程序博客网 时间:2024/05/21 04:22
#include <stdio.h> #include <string.h> char str[100];//输入字符串 int start[100],ans[100],res[100]; //被除数,商,余数 //转换前后的进制 const int oldBase = 10; const int newBase = 2; void change() {//各个数位还原为数字形式 int i,len = strlen(str); start[0] = len; for(i=1;i<= len;i++) { if(str[i-1] >= '0' && str[i-1] <= '9') { start[i] = str[i-1] - '0'; } } } void solve() { memset(res,0,sizeof(res));//余数初始化为空 int y,i,j; //模n取余法,(总体规律是先余为低位,后余为高位) while(start[0] >= 1) {//只要被除数仍然大于等于1,那就继续“模2取余” y=0; i=1; ans[0]=start[0]; // while(i <= start[0]) { y = y * oldBase + start[i]; ans[i++] = y/newBase; y %= newBase; } res[++res[0]] = y;//这一轮运算得到的余数 i = 1; //找到下一轮商的起始处 while((i<=ans[0]) && (ans[i]==0)) i++; //清除这一轮使用的被除数 memset(start,0,sizeof(start)); //本轮得到的商变为下一轮的被除数 for(j = i;j <= ans[0];j++) start[++start[0]] = ans[j]; memset(ans,0,sizeof(ans)); //清除这一轮的商,为下一轮运算做准备 } } void output() {//从高位到低位逆序输出 int i; for(i = res[0];i >= 1;--i) { printf("%d",res[i]); } printf("\n"); } int main() { while(scanf("%s",str)!=EOF){; change(); solve(); output(); // getchar(); } return 0; }
有更通用的写法,但基本上也是模R取余
大数取余的过程注意,可以参考另外一个通用的进制转换题目,找找看,网速太慢了,下次链接起来// TODO
- 题目描述:
将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。
- 输入:
多组数据,每行为一个长度不超过30位的十进制非负整数。
(注意是10进制数字的个数可能有30个,而非30bits的整数)
- 输出:
每行输出对应的二进制数。
- 样例输入:
0138
- 样例输出:
01111000
0 0
- OJ_1138 进制转换
- 进制转换,类型转换
- 进制转换(进制转换)
- 进制转换-----十进制转换成二进制
- 进制的转换,八进制转换十六进制
- 进制转换,运算符,类型转换,
- 十进制转换2-9进制转换
- 进制转换
- 无限进制转换
- 进制转换
- 进制转换
- 进制转换
- 【整理】进制转换
- 进制转换
- 七、进制转换
- 进制转换
- 进制转换
- 进制转换
- Git删除远程Tag、分支
- lucene入门02
- 长度为0的数组只用在结构体的最后一个成员,用以做一个地址标记,以后用。
- OpenGl的glMatrixMode()函数理解
- 【Linux C】信号及信号处理
- OJ_1138 进制转换
- mapreduce过程
- Leetcode Decode Ways 解题报告
- STM32NET学习笔记 IP ICMP部分
- C语言的内存分配(参考)
- [C++学习历程]基础部分 C++中的指针数组和结构
- 摄像头远程监控精灵 4.65
- Android中的回调Callback
- 从ini格式文件中(没行是“键=值”格式)中读取配置项的值,Split字符串的处理(综合)