一道简单的C++编程题,原题目在下面,求各位大神帮帮我吧!

一个正整数的数字的乘积的定义是:这个数字中所有非零数字的乘积。例如,999的数字乘积为9*9*9=729,729的数字乘积为7*2*9=126,126的数字乘积为1*2*... 一个正整数的数字的乘积的定义是:这个数字中所有非零数字的乘积。例如,999的数字乘积为9*9*9=729,729的数字乘积为7*2*9=126,126的数字乘积为1*2*6=12,12的数字乘积为1*2=2,一个数字的乘积根就是这样得到的,反复计算该数字的数字乘积,直到得到一位数字为止。
编写一个程序,输入一个200位以内的正整数,输出计算其乘积根的每一步。
展开
 我来答
a601025382s
2015-02-04 · TA获得超过8624个赞
知道小有建树答主
回答量:781
采纳率:0%
帮助的人:678万
展开全部

由于200位太长了,就直接大数处理。(这是最暴力的,测了几个数据发现很长的数据结果都是0,所以应该有什么规律,你可以自己想下)

#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
int a[202],b[202],t,tt;
char s[202];
int main()
{
    while(cin>>s)
    {
        t=strlen(s);
        int i,j,k;
        for(i=0;i<t;i++)a[i]=s[i]-'0';
        while(t!=1)
        {
            b[0]=1;
            tt=1;
            for(i=0;i<t;i++)
            {
                int temp=0;
                for(j=0;j<tt;j++)
                {
                    b[j]=a[i]*b[j]+temp;
                    temp=b[j]/10;
                    b[j]=b[j]%10;
                }
                if(temp!=0)b[tt++]=temp;
            }
            t=tt;
            for(i=0;i<t;i++)a[i]=b[i];
        }
        cout<<a[0]<<endl;
    }
    return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
物理公司的
推荐于2016-04-23 · TA获得超过5696个赞
知道大有可为答主
回答量:6105
采纳率:86%
帮助的人:1379万
展开全部
#include <iostream>
using namespace std;
int fen(int x){
int i=0,j=0,k=0,sum=1;
i = x/100;
j =(x-i*100)/10;
k = (x-i*100-j*10);
if(i !=0){
 sum = i*sum;
 cout<<i<<"*";
}

  if(j !=0){
  sum= j*sum;
  cout<<j<<"*";
 }
 
  if(k !=0){
  sum= k*sum;
  cout<<k<<"="<<sum<<endl;
 }
 
  return sum;
}
int main(){
int a;
cin>>a;
while(a>=10)
a = fen(a);
return 0;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
_Still丶兮丨
2015-02-04
知道答主
回答量:14
采纳率:0%
帮助的人:8.8万
展开全部
200位。。你需要用一个a[200]的数组 来存放这个数字
主要就是高精度运算 你可以去学一下
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式