荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: bakey (深海的鱼爱上会潜水的猫), 信区: Program
标  题: [合集]请教一个关于C的问题
发信站: 荔园晨风BBS站 (2005年05月30日16:36:25 星期一), 站内信件

☆   1  ──────────── 我是分割线 ─────────────────☆
发信人: kingting (迪赡罗刹), 信区: Program
标  题: 请教一个关于C的问题
时  间: Wed Apr 13 22:49:45 2005

我想实现1!+2!。。。。。+10!
我的代码如下:
#include<stdio.h>
main()
{
        int i,j;
}
请问为什以实现不了?问题出在哪里?



☆   2  ──────────── 我是分割线 ─────────────────☆
发信人: bso (meteor), 信区: Program
标  题: Re: 请教一个关于C的问题
时  间: Wed Apr 13 22:58:56 2005

把类型改为float或double型



☆   3  ──────────── 我是分割线 ─────────────────☆
发信人: Bambooflute (男儿当自强), 信区: Program
标  题: Re: 请教一个关于C的问题
时  间: 2005年04月13日23:12:22 星期三

你在进行第三次循环的时候,term的值已经不是1了,应该把term的初始化放在
第一个for下面



☆   4  ──────────── 我是分割线 ─────────────────☆
发信人: sunbyb (sunbyb), 信区: Program
标  题: Re: 请教一个关于C的问题
时  间: 2005年04月13日23:13:20 星期三

你的第二个for循环完成后term要让他返回1,



☆   5  ──────────── 我是分割线 ─────────────────☆
发信人: bso (meteor), 信区: Program
标  题: Re: 请教一个关于C的问题
时  间: Wed Apr 13 23:16:51 2005

对,按4097那样



☆   6  ──────────── 我是分割线 ─────────────────☆
发信人: bso (meteor), 信区: Program
标  题: Re: 请教一个关于C的问题
时  间: Wed Apr 13 23:17:31 2005

不好意思,是4079



☆   7  ──────────── 我是分割线 ─────────────────☆
发信人: sunbyb (sunbyb), 信区: Program
标  题: Re: 请教一个关于C的问题
时  间: 2005年04月13日23:23:24 星期三

不过这种程序不好,只是针对一个特殊的题目,要设计就设计可以解决一类问题的程序
#include <iostream>
int get_data(int n);

void main()
{
    using namespace std;
    int n,sum = 0 ;
    cout<<"please input the number: ";
    cin>>n;
    for(int i = 0; i < n; i++)
        sum += get_data(i+1);
    cout<<sum<<endl;
}

int get_data(int n)
{
    using namespace std;
    if( n <= 1)
        return 1;
    else
        return n*get_data(n-1);
}



☆   8  ──────────── 我是分割线 ─────────────────☆
发信人: kingting (迪赡罗刹), 信区: Program
标  题: Re: 请教一个关于C的问题
时  间: Wed Apr 13 23:29:28 2005

可是你用的是C++的输入输出流,除了输入输出C与C++还有什么不同?



☆   9  ──────────── 我是分割线 ─────────────────☆
发信人: kingting (迪赡罗刹), 信区: Program
标  题: Re: 请教一个关于C的问题
时  间: Wed Apr 13 23:29:28 2005

可是你用的是C++的输入输出流,除了输入输出C与C++还有什么不同?



☆  10  ──────────── 我是分割线 ─────────────────☆
发信人: bso (meteor), 信区: Program
标  题: Re: 请教一个关于C的问题
时  间: Wed Apr 13 23:29:52 2005

using namespace std;
这个做什么用的?



☆  11  ──────────── 我是分割线 ─────────────────☆
发信人: kevinh (如果爱·搁浅), 信区: Program
标  题: Re: 请教一个关于C的问题
时  间: 2005年04月14日10:09:41 星期四


除了term应该赋值为1的错误外,这个程序思路不是很好,因为后一项为前项乘上一个数,

不需要每次从头计算。




☆  12  ──────────── 我是分割线 ─────────────────☆
发信人: Bambooflute (男儿当自强), 信区: Program
标  题: Re: 请教一个关于C的问题
时  间: 2005年04月14日10:42:09 星期四


#include <iostream.h>
void main()
{
    int n;
    cin>>n;
    int sum=0,temp=1;
    for(int i=1;i<=n;i++)
    {
        temp=temp*i;
        sum=sum+temp;
    }
    cout<<sum<<endl;
}
这样会减少很多计算




☆  13  ──────────── 我是分割线 ─────────────────☆
发信人: kingting (迪赡罗刹), 信区: Program
标  题: Re: 请教一个关于C的问题
时  间: Thu Apr 14 17:27:31 2005

那也是哦



☆  14  ──────────── 我是分割线 ─────────────────☆
发信人: kingting (迪赡罗刹), 信区: Program
标  题: Re: 请教一个关于C的问题
时  间: Thu Apr 14 17:30:40 2005

这可以学到很多东西



☆  15  ──────────── 我是分割线 ─────────────────☆
发信人: pizzz (pizza mj), 信区: Program
标  题: Re: 请教一个关于C的问题
时  间: 2005年04月14日19:31:58 星期四

有什么不好。本来就是拿来解决实际问题。



☆  16  ──────────── 我是分割线 ─────────────────☆
发信人: Bambooflute (男儿当自强), 信区: Program
标  题: Re: 请教一个关于C的问题
时  间: 2005年04月14日20:49:09 星期四

不过这个不适合大整数,要是用数组保存数据,就可以真正做到通用了




☆  17  ──────────── 我是分割线 ─────────────────☆
发信人: sunbyb (sunbyb), 信区: Program
标  题: Re: 请教一个关于C的问题
时  间: 2005年04月14日21:06:07 星期四

只能说你的编程思想还差的太远



☆  18  ──────────── 我是分割线 ─────────────────☆
发信人: pizzz (pizza mj), 信区: Program
标  题: Re: 请教一个关于C的问题
时  间: 2005年04月14日21:08:08 星期四

ft。



☆  19  ──────────── 我是分割线 ─────────────────☆
发信人: bso (meteor), 信区: Program
标  题: Re: 请教一个关于C的问题
时  间: Thu Apr 14 21:19:53 2005

我正在做长整数的阶乘,不过现在主要在处理长整数时用二维数组时有问题,可能要用一维才
行,不过一维的对应关系就比较难处理,有谁知道怎样处理一维数组的对应关系吗?



☆  20  ──────────── 我是分割线 ─────────────────☆
发信人: Bambooflute (男儿当自强), 信区: Program
标  题: Re: 请教一个关于C的问题
时  间: 2005年04月14日21:42:59 星期四

可以规定一个数组元素可以存几位的数,然后多的数就往下个数组元素添




☆  21  ──────────── 我是分割线 ─────────────────☆
发信人: bakey (深海的鱼爱上会潜水的猫), 信区: Program
标  题: Re: 请教一个关于C的问题
时  间: 2005年04月14日21:50:15 星期四

二维也可以啊,很方便的~~



☆  22  ──────────── 我是分割线 ─────────────────☆
发信人: bso (meteor), 信区: Program
标  题: Re: 请教一个关于C的问题
时  间: Thu Apr 14 22:11:34 2005

二维处理不了~~~~~~~~~~~~~~~~~内存会溢出~~~~~~~~~~~~



☆  23  ──────────── 我是分割线 ─────────────────☆
发信人: Bambooflute (男儿当自强), 信区: Program
标  题: Re: 请教一个关于C的问题
时  间: 2005年04月14日22:13:40 星期四

一位处理很方便的,我做了一个1000的阶乘




☆  24  ──────────── 我是分割线 ─────────────────☆
发信人: bso (meteor), 信区: Program
标  题: Re: 请教一个关于C的问题
时  间: Thu Apr 14 22:14:12 2005

这样好像解决不了长整数的问题啊~~~~~~~~~~~~因为是阶乘,需要有对应的关系处理下去,那
样就不能随便放了



☆  25  ──────────── 我是分割线 ─────────────────☆
发信人: bso (meteor), 信区: Program
标  题: Re: 请教一个关于C的问题
时  间: Thu Apr 14 22:14:43 2005

哦?有多少位?



☆  26  ──────────── 我是分割线 ─────────────────☆
发信人: Bambooflute (男儿当自强), 信区: Program
标  题: Re: 请教一个关于C的问题
时  间: 2005年04月14日22:15:53 星期四

光是后面的0就有249位了,估计有几千位吧




☆  27  ──────────── 我是分割线 ─────────────────☆
发信人: bso (meteor), 信区: Program
标  题: Re: 请教一个关于C的问题
时  间: Thu Apr 14 22:19:32 2005

我想要算到3000!这个的结果大约接近10000位了~~~~~~~~~~所以这就是个问题了~~~~~~~~~~
~~



☆  28  ──────────── 我是分割线 ─────────────────☆
发信人: Bambooflute (男儿当自强), 信区: Program
标  题: Re: 请教一个关于C的问题
时  间: 2005年04月14日22:25:50 星期四

3000的话一位数组如果按每个元素存六位的话,可能要一千八百个元素啊




☆  29  ──────────── 我是分割线 ─────────────────☆
发信人: bso (meteor), 信区: Program
标  题: Re: 请教一个关于C的问题
时  间: Thu Apr 14 22:27:24 2005

你是用什么类型的数组存的?



☆  30  ──────────── 我是分割线 ─────────────────☆
发信人: Bambooflute (男儿当自强), 信区: Program
标  题: Re: 请教一个关于C的问题
时  间: 2005年04月14日22:29:07 星期四

unsigned int
不过如果算三千的话,为了安全起见,每个元素最好存五位,这样数组元素
个数又得增加



☆  31  ──────────── 我是分割线 ─────────────────☆
发信人: kingting (迪赡罗刹), 信区: Program
标  题: Re: 请教一个关于C的问题
时  间: Thu Apr 14 22:32:05 2005

不是啊,如果由用户输入任一个数的话,假如输入的是一个很大的数,那累加起来会很大的
,不知道用什么类型的数据来存啊


☆  32  ──────────── 我是分割线 ─────────────────☆
发信人: Bambooflute (男儿当自强), 信区: Program
标  题: Re: 请教一个关于C的问题
时  间: 2005年04月14日22:32:56 星期四

用数组咯




☆  33  ──────────── 我是分割线 ─────────────────☆
发信人: kingting (迪赡罗刹), 信区: Program
标  题: Re: 请教一个关于C的问题
时  间: Thu Apr 14 22:37:34 2005

数组的一个元素存取的位数也是有限的啊,还不是一样吗?



☆  34  ──────────── 我是分割线 ─────────────────☆
发信人: bso (meteor), 信区: Program
标  题: Re: 请教一个关于C的问题
时  间: Thu Apr 14 22:37:40 2005

我觉得用char 型可以了,int 太占空间了



☆  35  ──────────── 我是分割线 ─────────────────☆
发信人: bakey (深海的鱼爱上会潜水的猫), 信区: Program
标  题: Re: 请教一个关于C的问题
时  间: 2005年04月14日22:38:26 星期四

看你要算多大咯~~
二维处理不了~~~~~~~~~~~~~~~~~内存会溢出~~~~~~~~~~~~



☆  36  ──────────── 我是分割线 ─────────────────☆
发信人: bso (meteor), 信区: Program
标  题: Re: 请教一个关于C的问题
时  间: Thu Apr 14 22:38:28 2005

是要把一个数拆散成为一个个的放入数组中



☆  37  ──────────── 我是分割线 ─────────────────☆
发信人: bso (meteor), 信区: Program
标  题: Re: 请教一个关于C的问题
时  间: Thu Apr 14 22:39:11 2005

尽量大~~~~~~~~~~~~~~~~~~~~哈哈哈~~~~~~~~~~~~~~~最好把内存用光~~~~~~~~~~~~哈哈哈




☆  38  ──────────── 我是分割线 ─────────────────☆
发信人: bakey (深海的鱼爱上会潜水的猫), 信区: Program
标  题: Re: 请教一个关于C的问题
时  间: 2005年04月14日22:40:01 星期四

我做的试一个500!的.反正你要省的话就压位存储,原理是一样的



☆  39  ──────────── 我是分割线 ─────────────────☆
发信人: Bambooflute (男儿当自强), 信区: Program
标  题: Re: 请教一个关于C的问题
时  间: 2005年04月14日22:40:57 星期四

但是char型能存的位数很少啊,unsigned int型能存多几位,总的算了占空间
差不多吧



☆  40  ──────────── 我是分割线 ─────────────────☆
发信人: kingting (迪赡罗刹), 信区: Program
标  题: Re: 请教一个关于C的问题
时  间: Thu Apr 14 22:41:00 2005


是了,结构体跟类有什么不同啊?我们学的是C,可是C++中还有CLASS类,有什么不同啊?


☆  41  ──────────── 我是分割线 ─────────────────☆
发信人: bakey (深海的鱼爱上会潜水的猫), 信区: Program
标  题: Re: 请教一个关于C的问题
时  间: 2005年04月14日22:42:28 星期四

基本差不多,不过结构默认的数据时public的,类是private的



☆  42  ──────────── 我是分割线 ─────────────────☆
发信人: bso (meteor), 信区: Program
标  题: Re: 请教一个关于C的问题
时  间: Thu Apr 14 22:42:50 2005

我用char 型算两个数的就可以算很长的,但要算阶乘的话,本来想过可能会用递归,但觉得不
大可能~~~~~~~~~~因为对于两个长整数的积的后处理要一一对应,所以想到用二维数组,但二
维数组不能定义太大~~~~~~~~~~~~~~~~看来还是只能用一维数组了~~~~~~~~~~



☆  43  ──────────── 我是分割线 ─────────────────☆
发信人: kingting (迪赡罗刹), 信区: Program
标  题: Re: 请教一个关于C的问题
时  间: Thu Apr 14 22:43:59 2005

也就是说它们的功能相差不会太远,只是它们的作用域不同而已罗



☆  44  ──────────── 我是分割线 ─────────────────☆
发信人: kingting (迪赡罗刹), 信区: Program
标  题: Re: 请教一个关于C的问题
时  间: Thu Apr 14 22:45:30 2005

char类型不是只限在0-255之间吗?怎样算,举个例子来看下



☆  45  ──────────── 我是分割线 ─────────────────☆
发信人: bso (meteor), 信区: Program
标  题: Re: 请教一个关于C的问题
时  间: Thu Apr 14 22:47:38 2005

用文件作为辅助应该可以算很长的了~~~~~~~~~~~~~~~~~~~~~~~~~这样就可以利用两个长整
数的积的做法了~~~~~~~~不过我现在还没试过那个~~~~~~~~先要解决这个吧~~~~~~~~~~~~上
次看到那个程序就是可以算到3000!~~~~~真强~~~~~~而且代码很简洁~~~~~~~只是没有注译~
~~~~~~本人智慧太低了看不懂~~~~~~~~~~~5555555555555555555555555



☆  46  ──────────── 我是分割线 ─────────────────☆
发信人: bso (meteor), 信区: Program
标  题: Re: 请教一个关于C的问题
时  间: Thu Apr 14 22:48:20 2005

是在-128到127之间



☆  47  ──────────── 我是分割线 ─────────────────☆
发信人: kingting (迪赡罗刹), 信区: Program
标  题: Re: 请教一个关于C的问题
时  间: Thu Apr 14 22:49:53 2005

说没有用,你要做得出来才算你懂,算你有本事



☆  48  ──────────── 我是分割线 ─────────────────☆
发信人: Bambooflute (男儿当自强), 信区: Program
标  题: Re: 请教一个关于C的问题
时  间: 2005年04月14日22:53:55 星期四

这个是我做的1000的阶乘

#include <iostream.h>
void main()
{
   int m;
   cin>>m;
   unsigned int a[482];
   a[0]=1;
   int temp;
   short int count=0;
   for(int i=2;i<=m;i++)
   {
       int carry=0;
       for(int j=0;j<=count;j++)
       {
           temp=a[j]*i+carry;
           carry=temp/1000000;
           a[j]=temp%1000000;

       }
       if(carry>0)
       {
           count++;
           a[count]=carry;
       }

   }
   for(int j=count;j>=0;j--)
   {
       int k=6,n=100000;
       int temp1=a[j];
       if(j<count)
       {
        for(;k>0;k--)
        {
         cout<<temp1/n;
         temp1=temp1%n;
         n=n/10;
        }
       }
        else
            cout<<temp1;
   }
   cout<<endl;
}



☆  49  ──────────── 我是分割线 ─────────────────☆
发信人: bso (meteor), 信区: Program
标  题: Re: 请教一个关于C的问题
时  间: Thu Apr 14 23:04:19 2005

好难懂啊~~~~~~~~~~能不能加点注译啊?



☆  50  ──────────── 我是分割线 ─────────────────☆
发信人: jiffies (jiffies), 信区: Program
标  题: Re: 请教一个关于C的问题
时  间: 2005年04月14日23:04:30 星期四

str



☆  51  ──────────── 我是分割线 ─────────────────☆
发信人: Bambooflute (男儿当自强), 信区: Program
标  题: Re: 请教一个关于C的问题
时  间: 2005年04月14日23:05:35 星期四

sorry,我现在加




☆  52  ──────────── 我是分割线 ─────────────────☆
发信人: Bambooflute (男儿当自强), 信区: Program
标  题: Re: 请教一个关于C的问题
时  间: 2005年04月14日23:17:58 星期四

#include <iostream.h>
void main()
{
   int m;
   cin>>m;                   //输入阶乘的数
   unsigned int a[482];     //定义所需数组的大小
   a[0]=1;                   //令第一个元素的初始值为1
   int temp;                //存放中间结果
   short int count=0;         //计算数组元素的位数,从0开始
   for(int i=2;i<=m;i++)       //循环求阶乘
   {
       int carry=0;             //存放进位,每次乘法开始都为0
       for(int j=0;j<=count;j++)
       {
           temp=a[j]*i+carry;
           carry=temp/1000000;   // 求进位
           a[j]=temp%1000000;  //取六位放在一个数组元素中

       }
       if(carry>0)          //如果所得数超过6位,则有进位,将进位放入下个数组元

       {
           count++;
           a[count]=carry;
       }

   }
   for(int j=count;j>=0;j--)   //由于是顺序存数的,要得到真正的数,必须逆向打出
   {
       int k=6,n=100000;
       int temp1=a[j];
       if(j<count)          //如果最后一个数组元素不满六位则直接打出,不然会有0
在前面
       {
        for(;k>0;k--)
        {
         cout<<temp1/n;
         temp1=temp1%n;
         n=n/10;
        }
       }
        else
            cout<<temp1;
   }
   cout<<endl;




☆  53  ──────────── 我是分割线 ─────────────────☆
发信人: crazyle (紫狐狸), 信区: Program
标  题: Re: 请教一个关于C的问题
时  间: 2005年04月15日13:57:25 星期五

注释要详细...嗯....

最好当论文写,然后给我一份...哈哈哈哈哈哈哈

sorry,我现在加




☆  54  ──────────── 我是分割线 ─────────────────☆
发信人: Bambooflute (男儿当自强), 信区: Program
标  题: Re: 请教一个关于C的问题
时  间: 2005年04月15日15:22:35 星期五

ft~~~~




☆  55  ──────────── 我是分割线 ─────────────────☆
发信人: crazyle (紫狐狸), 信区: Program
标  题: Re: 请教一个关于C的问题
时  间: 2005年04月15日15:29:51 星期五

^_^....

少于3000字重写....

ft~~~~


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店