[C/C++]寫programme發現好有成功感

本帖最後由 asd888 於 2012-5-18 16:30 編輯

只係玩過下html   clone人地D code轉下顏色,字體大細,同整下框架咁
依家買左本初階C/C++書黎自修  自修左一個星期發現好有成功感

由基本野出下Hello World! 到整乘數表 到整下簡單密碼確認 到依家學整Array同Pointer(陣列同指標)
發現好多時寫programme都要諗番起D舊野黎用好采重記得

依家諗番本C/C++頭一課,諗到如果一個數好大,大到連 long同double都搞唔點(例如計算2^50)
所以自己諗諗下整左個用int array黎(計2^1至2^60)
每個步驟都有原因 而且當出到正確答案同簡化到D步驟時就好有成功感
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
        int n1[20]={1},k,j,column=70;

        do{
        printf("column(MAX60):");
        scanf("%d",&column);
        if(!(column>=1 && column<=60)) printf("please enter 1-60\n");
        rewind(stdin);
        }while(!(column>=1 && column<=60));
       


        for(j=1;j<=column;j++)        //column
        {
        for(k=0;k<=19;k++) n1[k]=n1[k]*2;        //calculate
               
        for(k=0;k<=19;k++)        //carry number
                {
                while(n1[k]>=10)
                        {
                                n1[k]=n1[k]-10;
                                n1[k+1]++;
                        }
                }
        printf("2^%2d=\t",j);
        for(k=19;k>=0;k--) printf("%d",n1[k]);        //show string       
        printf("\n");
        }


        system("pause");
        return 0;
}

網頁出唔到[ i ] 所以我將所有i變做k

只係玩過下html   clone人地D code轉下顏色,字體大細,同整下框架咁
依家買左本初階C/C++書黎自修  自修左一 ...
asd888 發表於 2012-5-18 16:08


出題給你做
寫出一個程式輸入一個數字,然後輸出他的平方根.不能使用標準庫的公式,誤差在1%之內也OK.


不求你比用標準庫還快(因為很牛了)

TOP

回復 2# sonichkhk

咁快想打沉我
等我試試先

TOP

個人意見...如果中間個for (k) loop 可以join 成一個,個performance 應該會再好d...

TOP

本帖最後由 asd888 於 2012-5-18 18:55 編輯

搞點  a*a=b   a慢慢變大 當a好接近b時  就輸出a

原來call左個 double a;    scan個%f要比番l變成scanf("%lf",&a)先OK
本書有講但睇漏眼
#include <stdio.h>
#include <stdlib.h>


#define precious 1e-5   //任改(理論上愈細精度愈高)



int main(void)
{
        double a;
        double c=0;

        printf("Maths homework from sonichkhk\n");

        do{        //input
        printf("enter positve integer:");
        scanf("%lf",&a);
        rewind(stdin);                                               
    }while(!(a>=0));
       


        while(!(c*c<=a && (c+precious)*(c+precious)>=a))        //calculate
        {
        c=c+precious;
        }

        printf("root = %g\n",c);        //output


        system("pause");
        return 0;
}

TOP

搞點  a*a=b   a慢慢變大 當a好接近b時  就輸出a

原來call左個 double a;    scan個%f要比番l變成scanf("% ...
asd888 發表於 2012-5-18 18:52

你這個方法其實不叫計算出是不斷一個個數試, 效率會好低喔

TOP

回復 6# sonichkhk


哈哈  出古惑被發現了
有冇D咩貼士呀~

TOP

回復  sonichkhk


哈哈  出古惑被發現了
有冇D咩貼士呀~
asd888 發表於 2012-5-18 19:07


找平方根方法很多可參考
http://en.wikipedia.org/wiki/Square_root
神奇的有這個
http://en.wikipedia.org/wiki/Fast_inverse_square_root

TOP

本帖最後由 asd888 於 2012-5-18 19:32 編輯

回復 4# hippoho

我都覺兩個for效率低
但係我砌極都砌唔到變一個for
有冇咩妙計?

個programme係每計一次所有字元x2   都check一次每個字元有冇做進位

TOP

回復 2# sonichkhk

你呢題似數學題多過programming喎...
要識Newton's method先做到

TOP