注册 登录
编程论坛 C++教室

一道小题目 。。帮忙解惑。除法

cj0608 发布于 2009-08-13 16:23, 543 次点击
编写一程序计算两个整分数的和。程序运行结果应具有如下所示的形式:
输入第一个分数:1/2
输入第一个分数:2/5
两分数和为:9/10
(提示:输入分数时,可采用提示符链接形式,如输入a/b:cin>>a>dummy>>b;)
来人帮忙编个哈,在这先谢谢了。还有我主要是那个提示不懂。不知道是什么意思。
3 回复
#2
xufen3402009-08-13 21:42
#include<iostream>
using namespace std;
const int max=100;
typedef struct{
    char upnum[max];
    char downnum[max];
    int upnumlength;
    int downnumlength;
} fraction;
fraction getnum(char* parray);
fraction getresult(fraction f1,fraction f2);
int main()
{
    char num1[max];
    char num2[max];
    cin>>num1>>num2;
    fraction mynum1=getnum(num1);
    fraction mynum2=getnum(num2);
    fraction result=getresult(mynum1,mynum2);
    int i;
    for(i=0;i<result.upnumlength;i++) cout<<result.upnum[i];
    cout<<"/";
    for(i=0;i<result.downnumlength;i++) cout<<result.downnum[i];
int y;
cin>>y;
}
 
//返回分子分母
fraction getnum(char* parray)
{
    fraction mynum;
    mynum.downnumlength=0;
    mynum.upnumlength=0;
    int i=0;
    int numlength=strlen(parray);
    while(parray[i]!='/'){
        mynum.upnum[i]=parray[i];//取分子
        i++;
        mynum.upnumlength++;
    }
    mynum.upnum[i]='\0';
    int j=0;  
    i++;
    while(i<numlength){
        mynum.downnum[j]=parray[i];//取分母
        i++;
        j++;
        mynum.downnumlength++;
    }
    mynum.downnum[j]='\0';
    return mynum;
}
 
//分母加法换算
fraction getresult(fraction f1,fraction f2)
{
   int upnum1,upnum2;
   int downnum1,downnum2;
   int downnum,upnum;
   fraction result;
   upnum1=atoi(f1.upnum);
   downnum1=atoi(f1.downnum);
   upnum2=atoi(f2.upnum);
   downnum2=atoi(f2.downnum);
   if(downnum1%downnum2==0){
       downnum=downnum1;
       upnum=upnum1+upnum2;
   }else if(downnum2%downnum1==0){
       downnum=downnum2;
       upnum=upnum1+upnum2;
   }else {//这里有个求最大公倍数先空着,一时想不出
       downnum=downnum2*downnum1;
       upnum=upnum1*downnum2+upnum2*downnum1;
   }
   itoa(downnum,result.downnum,10);
   itoa(upnum,result.upnum,10);
   result.downnumlength=strlen(result.downnum);
   result.upnumlength=strlen(result.upnum);
   return result;
}
 
 
     
        
#3
hyfl2009-08-17 14:19
提示的意思就是,在控制台下你输入:a/b
输入的是3个字符,而程序需要的只是分子a和分母b的值。所以声明一个额外的变量dummy存放字符'/'。
cin>>a>>dummy>>b;
输入:2/5
那么a=2,dummy的值为/,b=5
#4
lonmaor2009-08-17 14:36
以下是引用hyfl在2009-8-17 14:19的发言:提示的意思就是,在控制台下你输入:a/b输入的是3个字符,而程序需要的只是分子a和分母b的值。所以声明一个额外的变量dummy存放字符'/'。cin>>a>>dummy>>b;输入:2/5那么a=2,dummy的值为/,b=5
输入应为 2 / 5

或者

2
/
5
1