• 《C/C++/Java/Pascal 程序设计基础》习题集 解题4


    循环-19. 币值转换(20)

    时间限制
    400 ms
    内存限制
    65536 kB
    代码长度限制
    8000 B
    判题程序
    Standard
    作者
    陈建海(浙江大学)

    输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式。如23108元,转换后变成“贰万叁仟壹百零捌”元。为了简化输出,用小写英文字母a-j顺序代表大写数字0-9,用S、B、Q、W、Y分别代表拾、百、仟、万、亿。于是23108元应被转换输出为“cWdQbBai”元。

    输入格式:

    输入在一行中给出一个不超过9位的非负整数。

    输出格式:

    在一行中输出转换后的结果。注意“零”的用法必须符合中文习惯。

    输入样例1:
    813227345
    
    输出样例1:
    iYbQdBcScWhQdBeSf
    
    输入样例2:
    6900
    
    输出样例2:
    gQjB
    

    代码:这题没做出来,原作者:http://blog.csdn.net/lmy_go/article/details/41631639

    #include<stdio.h>
    #include<math.h>
    int n,s=0;
    int main(void)
    {
    	int i,j,k,p=1,flag=1;
    	int f(int q,int n);
    	scanf("%d",&n);
    	
    	for(i=0;n/p>=10;i++){
    		p=pow(10,i);
    		s++;
    	}
    	if(n==0) printf("a");
    	if(n<10&&n>=0) s=1;
    	for(j=1;j<=s;j++){
    		switch(f(j,n)){
    			case 0:if(j!=s&&j!=s-4){
    				if(f(j+1,n)==0) flag=0;
    				else flag=1;
    				if(flag)printf("a");break;
    				};break;
    			case 1:printf("b");break;
    			case 2:printf("c");break;
    			case 3:printf("d");break;
    			case 4:printf("e");break;
    			case 5:printf("f");break;
    			case 6:printf("g");break;
    			case 7:printf("h");break;
    			case 8:printf("i");break;
    			case 9:printf("j");break;
    		}
    		if(f(j,n)==0&&j!=s&&j!=s-4) continue;
    		else{
    			if(s==9&&j==5){
    				if(f(2,n)==0&&f(3,n)==0&&f(4,n)==0&&f(5,n)==0)
    				continue;
    			}
    		switch(s-j){
    			case 1:printf("S");break;
    			case 2:printf("B");break;
    			case 3:printf("Q");break;
    			case 4:printf("W");break;
    			case 5:printf("S");break;
    			case 6:printf("B");break;
    			case 7:printf("Q");break;
    			case 8:printf("Y");break;
    		}
    	}} 
    	return 0;
    }
    int f(int q,int n)
    {
    	int k,a;
    	if(q==1) k=n/pow(10,s-1);
    	else{
    		a=n/pow(10,s-q+1);
    		k=n/pow(10,s-q)-a*10;
    	}
    	return k;
    }


    结构-05. 有理数均值(20)

    时间限制
    400 ms
    内存限制
    65536 kB
    代码长度限制
    8000 B
    判题程序
    Standard
    作者
    乔林(清华大学)

    本题要求编写程序,计算N个有理数的平均值。

    输入格式:

    输入第1行给出正整数N(<=100);第2行中按照“a1/b1 a2/b2 ……”的格式给出N个分数形式的有理数,其中分子和分母全是整形范围内的整数;如果是负数,则负号一定出现在最前面。

    输出格式:

    在一行中按照“a/b”的格式输出N个有理数的平均值。注意必须是该有理数的最简分数形式,若分母为1,则只输出分子。

    输入样例1:
    4
    1/2 1/6 3/6 -5/10
    
    输出样例1:
    1/6
    
    输入样例2:
    2
    4/3 2/3
    
    输出样例2:
    1

    代码:

    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<iostream>
    #include<cmath>
    #include<assert.h>
    using namespace std;
    typedef long long ll;
    int gcd(int n,int m)  //gcd
    {
        if(n==0&&m==0) return 1;
        if(n==0) return m;
        if(m==0) return n;
        if(n<m)
        {
            int tmp=m;
            m=n;
            n=tmp;
        }
        int rem=n%m;
        while(rem!=0)
        {
            n=m;
            m=rem;
            rem=n%m;
        }
        return m;
    }
    struct num  //struct
    {
        int n1;
        char n2;
        int n3;
        int res;
    };
    
    int main()
    {
        int n,temp;
        cin>>n;
        ll mul=1;
        num *nu=new num[n+1];
        for(int i=0;i<n;i++)
        {
            cin>>nu[i].n1>>nu[i].n2>>nu[i].n3;
            if(nu[i].n1==0)
            {
                nu[i].n3=1;
            }
            else   //处理
            {
                temp=gcd(abs(nu[i].n1),abs(nu[i].n3));
                nu[i].n1/=temp;
                nu[i].n3/=temp;
            }
        }
        for(int i=0;i<n;i++)
        {
            mul*=nu[i].n3;
        }
        ll sum=0;
        for(int i=0;i<n;i++)
        {
            nu[i].res=mul/(nu[i].n3)*(nu[i].n1);
            sum+=nu[i].res;
        }
        ll tmpa=gcd(abs(sum),abs(n*mul));
        ll r1=(sum)/tmpa,r2;
        if((mul*n)>=tmpa)
        {
            r2=(mul*n)/tmpa;
        }
        if(r1%r2==0)
            cout<<r1/r2<<endl;
        else
            cout<<r1<<'/'<<r2<<endl;
    
        return 0;
    }

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    redis系列之------过期策略
    总结与期盼
    服务不可用排查思路
    Spring Boot Starters到底怎么回事?
    redis系列之------主从复制
    redis系列之------对象
    redis系列之------数据库
    DirectX11 With Windows SDK--00 目录
    DirectX11 With Windows SDK--34 位移贴图
    DirectX11 With Windows SDK--33 曲面细分阶段(Tessellation)
  • 原文地址:https://www.cnblogs.com/Tobyuyu/p/4965263.html
Copyright © 2020-2023  润新知