• 进制转换(大数)


    问题 : 进制转换1

    时间限制: 1 Sec  内存限制: 32 MB
    提交: 15  解决: 8
    [提交][状态]

    题目描述

    将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。

    输入

    多组数据,每行为一个长度不超过30位的十进制非负整数。
    (注意是10进制数字的个数可能有30个,而非30bits的整数)

    输出

    每行输出对应的二进制数。

    样例输入

    985
    211
    1126

    样例输出

    1111011001
    11010011
    10001100110

    由于位数超出限制,所以要用大数,涉及大数除法和大数取余,注意输入为0的情况

    #include<stdio.h>
    #include<string.h>
    #define N 200
    int main()
    {
    	int i,sum,j,len,answer,point;
    	char str[N];
    	int ans[N],a[N];
    	while(scanf("%s",str)!=EOF)
    	{
    		
    		sum=0;j=0;
    		len=strlen(str);
    		if(len==1&&str[0]=='0')
    		{
    			printf("0
    ");
    			continue;
    		}
    		for(i=0;i<len;i++)
    		a[i]=str[i]-'0';
    		memset(ans,0,sizeof(ans));
    		while(1)
    		{
    			answer=0;
    			for(i=0;i<len;i++)
    			if(a[i]!=0)
    			{
    				answer=1;
    				break;
    			}
    			if(answer==0)
    			break;
    			sum=0;
    			for(i=0;i<len;i++)
    			{
    				sum=sum*10+a[i];
    				sum=sum%2;
    			}
    			ans[j++]=sum;
    			point=0;
    			for(i=0;i<len;i++)
    			{
    				a[i]+=point*10;
    				point=a[i]%2;
    				a[i]/=2;
    			}
    			
    		}
    		for(j--;j>=0;j--)
    		printf("%d",ans[j]);
    		printf("
    ");
    	}
    	return 0;
    }

    另有一种简单的代码

    #include<stdio.h>
    #include<string.h>
    int main()
    {
        char a[50],c[550];
    	int ans[50];
        int i,j,k,n,len,sum;
        while(scanf("%s",a)!=EOF)
        {
            len=strlen(a);
            j=0;
    		c[j]='0';
    		sum=1;
            for(i=0;i<len;i++)
               ans[i]=a[i]-'0';
            while(sum)
            {
                sum=0;
                for(i=0;i<len;i++)
                {
                    k=ans[i]/2;
    				sum+=k;
                    if(i==len-1)
                        c[j++]=ans[i]%2+'0';
                    else
                        ans[i+1]+=ans[i]%2*10;
                    ans[i]=k;
                }
            }
            for(j--;j>=0;j--)
                printf("%c",c[j]);
            printf("
    ");
        }
        return 0;
     } 

    问题 : 进制转换2

    时间限制: 1 Sec  内存限制: 32 MB
    提交: 31  解决: 11
    [提交][状态]

    题目描述

    将M进制的数X转换为N进制的数输出。

    输入

    输入的第一行包括两个整数:M和N(2<=M,N<=36)。
    下面的一行输入一个数X,X是M进制的数,现在要求你将M进制的数X转换成N进制的数输出。

    输出

    输出X的N进制表示的数。

    样例输入

    10 2
    11

    样例输出

    1011

    提示


    注意输入时如有字母,则字母为大写,输出时如有字母,则字母为小写。

    #include<stdio.h>
    #include<string.h>
    #define N 1020
    char map[40]="0123456789abcdefghijklmnopqrstuvwxyz";
    int main()
    {
        int m,n,i,j,sum,len,point,answer;
        char ans[N],str[N];
        int a[N];
        while(scanf("%d%d",&m,&n)!=EOF)
        {
            memset(ans,0,sizeof(ans));
            memset(a,0,sizeof(a));
            scanf("%s",str);
            len=strlen(str);
            if(len==1&&str[0]=='0')
            {
                printf("0
    ");
                continue;
            }
            for(i=0;str[i]!='';i++)
            {
                if(str[i]>='A'&&str[i]<='Z')
                    a[i]=str[i]-'A'+10;
                else a[i]=str[i]-'0';
            }
            j=0;
            while(1)
            {
                answer=0;
                for(i=0;i<len;i++)
                if(a[i]!=0)
                {
                    answer=1;
                    break;
                }
                if(answer==0)
                break;
                sum=0;
                for(i=0;i<len;i++)
                {
                    sum=sum*m+a[i];
                    sum=sum%n;
                }
                ans[j++]=map[sum];
                point=0;
                for(i=0;i<len;i++)
                {
                    a[i]+=point*m;
                    point=a[i]%n;
                    a[i]/=n;
                }
            }
            for(j--;j>=0;j--)
            printf("%c",ans[j]);
            printf("
    ");
        }
        return 0;
    }

    问题 : 10进制 VS 2进制

    时间限制: 1 Sec  内存限制: 32 MB
    提交: 6  解决: 5
    [提交][状态]

    题目描述

    对于一个十进制数A,将A转换为二进制数,然后按位逆序排列,再转换为十进制数B,我们称B为A的二进制逆序数。
    例如对于十进制数173,它的二进制形式为10101101,逆序排列得到10110101,其十进制数为181,181即为173的二进制逆序数。

    输入

    一个1000位(即10^999)以内的十进制数。

    输出

    输入的十进制数的二进制逆序数。

    样例输入

    985

    样例输出

    623


    #include<stdio.h>
    #include<string.h>
    #define N 1020
    char map[40]="0123456789abcdefghijklmnopqrstuvwxyz";
    int main()
    {
        int m,n,i,j,sum,len,point,answer;
        char ans[N],str[N];
        int a[N];
        while(scanf("%d%d",&m,&n)!=EOF)
        {
            memset(ans,0,sizeof(ans));
            memset(a,0,sizeof(a));
            scanf("%s",str);
            len=strlen(str);
            if(len==1&&str[0]=='0')
            {
                printf("0
    ");
                continue;
            }
            for(i=0;str[i]!='';i++)
            {
                if(str[i]>='A'&&str[i]<='Z')
                    a[i]=str[i]-'A'+10;
                else a[i]=str[i]-'0';
            }
            j=0;
            while(1)
            {
                answer=0;
                for(i=0;i<len;i++)
                if(a[i]!=0)
                {
                    answer=1;
                    break;
                }
                if(answer==0)
                break;
                sum=0;
                for(i=0;i<len;i++)
                {
                    sum=sum*m+a[i];
                    sum=sum%n;
                }
                ans[j++]=map[sum];
                point=0;
                for(i=0;i<len;i++)
                {
                    a[i]+=point*m;
                    point=a[i]%n;
                    a[i]/=n;
                }
            }
            for(j--;j>=0;j--)
            printf("%c",ans[j]);
            printf("
    ");
        }
        return 0;
    }


  • 相关阅读:
    字典序 动物统计 输出姓名和个数
    心急的C小加
    docker rabbitmq
    Docker Device Mapper 使用 direct-lvm
    FW docker使用问题总结,解决国内不能访问gcr.io的问题
    巧用AWK处理二进制数据文件
    Webshell清除-解决驱动级文件隐藏挂马
    phantomflow phantomcss, phantomas
    cobbler, puppet
    java javassis crack class
  • 原文地址:https://www.cnblogs.com/zyq1758043090/p/10003085.html
Copyright © 2020-2023  润新知