网页
资讯
视频
图片
知道
文库
贴吧
地图
采购
进入贴吧
全吧搜索
吧内搜索
搜贴
搜人
进吧
搜标签
日
一
二
三
四
五
六
签到排名:今日本吧第
个签到,
本吧因你更精彩,明天继续来努力!
本吧签到人数:0
一键签到
成为超级会员,使用一键签到
一键签到
本月漏签
0
次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行
补签
。
连续签到:
天 累计签到:
天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
04月13日
漏签
0
天
c语言吧
关注:
799,013
贴子:
4,353,703
看贴
图片
吧主推荐
视频
游戏
15
回复贴,共
1
页
<<返回c语言吧
>0< 加载中...
C语言问题求助
只看楼主
收藏
回复
为最好的夏目
大能力者
8
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
本人是个萌新,刚接触C语言,也就学了循环、数组、字符串,结果遇到一个大难题不会做
问题:输入为一个二进制大整数(大整数大于0,不带符号,无前导0,至少1位数字,且不超过100位数字)。要求将该整数转换成十进制数,并输出。建议:用字符数组存储大整数。
转换成的十进制最大会超过2的99次方,太大了,不知道怎么存储,怎么输出
YYYYXoxoxo
麻婆豆腐
11
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
usigned long long int
若挂念太多你
麻婆豆腐
11
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
不给你说了用数组吗,数组低位是数字的高位部分
ꪔ̤̱
团子家族
10
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
想知道楼主用什么书(>_<)我上课没听懂
开心快乐19xx
毛蛋
1
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
比如以数组形式输入一个100位的二进制数。
11001101*****101*****011
\______62____/\__38__/
前62位能转化成一个longlongint型数字,再将这个数字转化成一个字符数组。然后对这个数组进行38次的乘以2(大于10取余进1)。再加上后面38位直接转化成的longlongint型数字。
朝阳下的晨露
毛蛋
1
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
/*
题目描述:
输入为一个二进制大整数(大整数大于0,不带符号,无前导0,至少一位数字,且不超过100位数字)。要求将该整数转换成十进制数,并输出。
建议:用字符数组存储大整数。
输入样例:
1001001100101100000001011010010
输出样例:
1234567890
*/
//100位1: 1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
//10进制值: 1267650600228229401496703205375
#include<stdio.h>
#include<stdlib.h>
int main(){
int i,j;
int length = 0; // 用来记录输入整数的位数,初始化为 0
char ch; // 当前读到的字符
char largeNum[102];
scanf("%c",&ch); // 每次读取一个字符,存到 ch 中
for(i = 0; ch != '\n'; i++){ //如果读到的字符不是回车 '\n',执行循环,将读到的字符存到字符数组中
largeNum[i] = ch;
scanf("%c",&ch); // 读取下一个字符
}
length = i; // 循环执行结束后,i的值就是输入整数的位数
int num; //字符数组每一位转换为数字后的值,也就是 0 或者 1
// long long int sum = 0; // 转换后的十进制数
int p = 0; // 每次进位的值,0 或 1
int sum[100]; // 用来存储最终结果,每一位存储一位数
for(i = 0; i < 100; i++){
sum[i] = 0;
}
for(i = 0; i < length; i++){
num = largeNum[i] - '0'; // 因为数组中存的是字符的0和1,需要减去0的ASCII值来转成数字的0和1
p = 0; // 初始的进位为 0
// sum = sum * 2 + num; 秦九韶算法
for(j = 0; sum < 100; j++){
if( j == 0 ){
sum[j] = sum[j] * 2 + num; // 只对个位加当前位数的二进制值
}
else{
sum[j] = sum[j] * 2;
}
sum[j] += p; // 再加上进位
p = sum[j] / 10; // 计算进位
sum[j] %= 10; // 保留个位
}
}
for(i = 99; sum[i] == 0; i--); // 找出第一个不是0的位置
for(j = i; j >= 0; j--){ // 倒序输出
printf("%d",sum[j]);
}
return 0;
}
亲测可用,但代码还有很多可以改进的地方,比如num数组不需要设那么大等等,不过懒得改了。
登录百度账号
扫二维码下载贴吧客户端
下载贴吧APP
看高清直播、视频!
贴吧页面意见反馈
违规贴吧举报反馈通道
贴吧违规信息处理公示