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

求1到n 的连乘积 的问题 一直不过哦

qxw1996 发布于 2009-07-19 22:20, 1893 次点击
#include<iostream>
using namespace std;
int main()
{
    cin>>n;
    s=0;
    for(i=1;i<=n-1;i=i+1)
    {
                         if(n %i==0)         
                         s=s+i;
    )
      cout<<s;
      system("pause");
      return 0;
}

http://218.5.5.242:9015/JudgeOnline/showproblem?problem_id=1116

帮忙看看啊。谢谢了。
9 回复
#2
zhqer2009-07-19 23:03
楼主要连乘还是连加啊,还有cin>>n之前要先声明n啊。
#3
zhqer2009-07-19 23:07
int main(void)
{
    int n;
    long sum = 1;
    cout << "请输入n:";
    cin >> n;
    for (int i = 2; i <=n; ++i)
        sum *= i;

    cout << "1到" << n << "的连乘结果是" << sum << endl;

    return 0;
}
这个比较粗糙的,应该还要对n进行验证等等工作,留给楼主了
#4
rainbowpurpl2009-07-20 10:47
楼上正解,但这个只能N较小时实现,当N比较大时会出现错误,因为积很容易造成long sum溢出
#5
dr05262009-07-20 21:26
#include<iostream>
using namespace std;
int main()
{   double n;
    cin>>n;
    double s=0;
    for(double i=1;i<=n-1;i=i+1)
    {
       if(n %i==0)
       s=s+i;
  }
      cout<<s;

      return 0;
}
#6
dr05262009-07-20 21:29
#include<iostream>
using namespace std;
int main()
{   int n;
    cin>>n;
    int s=0;
    for(int i=1;i<=n-1;i=i+1)
    {
       if(n %i==0)
       s=s+i;
  }
      cout<<s;

      return 0;
}
上一解有问题 你试一下这个
#7
谁是王者2009-07-21 09:09
----------
用数组来算可以防止溢出。。。。。
#8
谁是王者2009-07-21 09:12
这是二的100次方的程序稍微改下就好
#include <stdio.h>
void main()
{
    int s[100]={1};  /*初始化第一位为0,其它每一位为0*/
    int i,j,m=0;     /*m指示最高位为s[m]*/
    for(i=1;i<=100;i++)
    {
        for(j=0;j<=m;j++)
            s[j]*=2;
        for(j=0;j<=m;j++)  /*检查进位*/
            if(s[j]>9)        /*第j位需要进位*/
            {
                s[j+1]+=s[j]/10;
                s[j]%=10;
                if(j+1>m) m=j+1;   /*最高位进位*/
            }
    }
    printf("2^100 = ");
    for(j=m;j>=0;j--)
        printf("%d",s[j]);
    printf("\n");
}
#9
明次2009-07-21 13:20
学习了...
#10
yu5890681yu2009-07-22 15:06
回复 8楼 谁是王者
要是在这个代码的基础上改的话好像很麻烦啊..
1