zoukankan      html  css  js  c++  java
  • ZJU 1272 Numerically Speaking

    大数问题......

    根据先余为低位,后余为高位的基本思想,进行26->10进制的互相转换。

    注意如果输入为的10进制数为26的整数时,要先减一再求余,最后结果在加a..因为目标进制没有表示0的数

    Presentation Error 了好几次。。要看到这句话“and the corresponding word number starting in column 23”

    #include <stdio.h>
    #include <string.h>
    
    char str[50];
    char num[50];
    
    void strtonum(void)				//字母转数字
    {
    	int tem[50];
    	int last;
    	int i,j;
    	bool sign=true;
    	int remainder=0;
    	int len=strlen(str);
    	for (i=0;i<len;i++)
    		tem[i]=str[i]-'a'+1;
    	j=0;
    	while(sign)			//当tem不全为零
    	{
    		remainder=0;
    		for (i=0;i<len;i++)
    		{
    			last=tem[i];
    			tem[i]=(remainder*26 +last)/10;			//储存商,做为下一轮的被除数
    			remainder=(remainder*26+last)%10;
    		}
    		if((j+1)%4==0)
    			num[j++]=',';
    		num[j++]=remainder+'0';				//先余为低位,倒序储存
    		sign=false;
    		for (i=0;i<len;i++)
    			if(tem[i]!=0)
    			{
    				sign=true;
    				break;
    			}
    	}
    	num[j]='';			//设置结束标志
    
    }
    
    void numtostr(void)				//数字转字母
    {
    	int tem[50];
    	int len=strlen(num);
    	int i,j;
    	int c;
    	bool sign=true;
    	int remainder=0;
    	for (i=0;i<len;i++)
    		tem[i]=num[i]-'0';
    	j=0;
    	while(sign)		//当tem不全为零时
    	{
    
    		remainder=0;
    		for (i=0;i<len;i++)
    		{
    			c=tem[i];
    		
    			if(i==len-1)
    			{
    				tem[i]=(remainder*10+c-1)/26;					//减一是为了防止当输入的数为26的整数倍时,发生错误
    				remainder= (remainder*10+c-1)%26;
    			}
    			else
    			{
    				tem[i]=(remainder*10+c)/26;
    				remainder= (remainder*10+c)%26;
    			}
    
    		}
    		str[j++]=remainder+'a';
    
    		sign=false;
    		for (i=0;i<len;i++)
    			if(tem[i]!=0)
    			{
    				sign=true;
    				break;
    			}
    
    	}
    	str[j]='';
    }
    
    
    
    int main()
    {
    	char tem[50];
    	int i,j;
    	while(scanf("%s",tem)&&tem[0]!='*')
    	{
    		
    		if(tem[0]>='0'&&tem[0]<='9')
    		{
    			strcpy(num,tem);
    			numtostr();
    			for(i=strlen(str)-1;i>=0;i--)
    				printf("%c",str[i]);
    			for(i=23-strlen(str)-1;i>0;i--)			//从第23列输出数字
    				printf(" ");
    			for (i=0;i<strlen(num);i++)
    			{
    				if(i==strlen(num)%3&&i!=0)
    					printf(",");
    				else if(i%3-strlen(num)%3==0&&i!=0)
    					printf(",");
    				printf("%c",num[i]);
    
    				
    			}
    			
    
    		}
    		else
    		{
    			strcpy(str,tem);
    			strtonum();
    			printf("%s",str);
    			for(i=23-strlen(str)-1;i>0;i--)
    				printf(" ");
    			for(i=strlen(num)-1;i>=0;i--)
    				printf("%c",num[i]);
    			
    			
    		}
    		printf("
    ");
    
    	}
    	return 0;
    }


     

  • 相关阅读:
    ArrayList用法
    MessageBox
    将文本文件导入Sql数据库
    在桌面和菜单中添加快捷方式
    泡沫排序
    Making use of localized variables in javascript.
    Remove double empty lines in Visual Studio 2012
    Using Operations Manager Connectors
    Clear SharePoint Designer cache
    Programmatically set navigation settings in SharePoint 2013
  • 原文地址:https://www.cnblogs.com/frankM/p/4399541.html
Copyright © 2011-2022 走看看