九度OJ-1138-大数的求余

来源:互联网 发布:轮回转世是真的吗 知乎 编辑:程序博客网 时间:2024/05/19 09:39

题目描述:
将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。
输入:
多组数据,每行为一个长度不超过30位的十进制非负整数。
(注意是10进制数字的个数可能有30个,而非30bits的整数)
输出:
每行输出对应的二进制数。
样例输入:
0
1
3
8
样例输出:
0
1
11
1000

#include <stdio.h>#include <string.h>#include <stdlib.h>#define DATA 40#define MAX 200void ten2Bin(char *);char bin[MAX];int main(){    char str[DATA];    while(scanf("%s",str)!=EOF)    {        ten2Bin(str);        puts(bin);    }    return 0;}void ten2Bin(char * str){    int i,j,k,len,sum,d;    char temp;    //init    sum =1;    len = strlen(str);    k=0;    memset(bin,0,sizeof(bin));    while(sum)    {        sum=0;        for ( i = 0; i < len; ++i)//一次for循环后可得到一个商和余数        {            d = (str[i]-'0')/2;            sum +=d;            if (i==len-1)            {                bin[k++]=(str[i]-'0')%2+'0';            }else            {                str[i+1]+=(str[i] - '0')%2*10;            }            str[i] = d+'0';        }    }    //reverse    for (i = 0, j =k-1;i<j; ++i,j--)    {        temp=bin[j];        bin[j]=bin[i];        bin[i]=temp;    }}
0 0
原创粉丝点击