C語言基礎 -25 數組_ 一維數組之進制轉換/打印素數

[root@localhost CH01]# cat base_c.c
#include <stdio.h>
 
#define MAXCHAR 101  /*最大允許字符串長度*/
 
int char_to_num(char ch);  /*返回字符對應的數字*/ 
char num_to_char(int num);  /*返回數字對應的字符*/
long source_to_decimal(char temp[], int source);  /*返回由原數轉換成的10進制數*/
int decimal_to_object(char temp[], long decimal_num, int object);  /*返回轉換成目標數制後字符數組的長度*/
void output(char temp[], int length);  /*將字符數組逆序打印*/
 
int main()
{
    int source;  /*存儲原數制*/
    int object;  /*存儲目標數制*/
    int length;  /*存儲轉換成目標數制後字符數組的長度*/
    long decimal_num;  /*存儲轉換成的10進制數*/
    char temp[MAXCHAR];  /*存儲待轉換的數值和轉換後的數值*/
    int flag = 1;  /*存儲是否退出程序的標誌*/
    while(flag)  /*利用輸入的flag值控制循環是否結束*/
    {
        printf("轉換前的數是:");
        scanf("%s", temp);
        printf("轉換前的數制是:");
        scanf("%d", &source);
        printf("轉換後的數制是:");
        scanf("%d", &object);
        printf("轉換後的數是:");
        decimal_num = source_to_decimal(temp, source);
        length = decimal_to_object(temp, decimal_num, object);
        output(temp, length);
        printf("繼續請輸入1,否則輸入0:\n");
        scanf("%d", &flag);
    }
 
    return 0;
}
/*將字符轉換成數字*/
int char_to_num(char ch)
{
    if(ch>='0' && ch<='9')
        return ch-'0';  /*將數字字符轉換成數字*/
    else
        return ch-'A'+10;  /*將字母字符轉換成數字*/
}
char num_to_char(int num)
{
    if(num>=0 && num<=9)
        return (char)('0'+num-0);  /*將0~9之間的數字轉換成字符*/
    else
        return (char)('A'+num-10);  /*將大於10的數字轉換成字符*/
}
long source_to_decimal(char temp[], int source)
{
    long decimal_num = 0;  /*存儲展開之後的和*/
    int length;
    int i;
    for( i=0; temp[i]!='\0'; i++ );
    length=i;
    for( i=0; i<=length-1; i++ )  /*累加*/
        decimal_num = (decimal_num*source) + char_to_num(temp[i]);
    return decimal_num;
}
int decimal_to_object(char temp[], long decimal_num, int object)
{
    int i=0;
    while(decimal_num)
    {
        temp[i] = num_to_char(decimal_num % object);  /*求出餘數並轉換爲字符*/
        decimal_num = decimal_num / object;  /*用十進制數除以基數*/
        i++;
    }
    temp[i]='\0';
    return i;
}
void output(char temp[], int length)
{
    int i;
    for( i=length-1; i>=0; i--)  /*輸出temp數組中的值*/
        printf("%c", temp[i]);
    printf("\n");
}

 

打印1000以內的素數 

[root@localhost CH01]# cat primer_test.c
#include<stdio.h>
#include<stdlib.h>

static void primer(void)
{
        char primer[1001] = {0};
        int i,j;
        for(i = 2;i < 1001; i++)
        {       if(primer[i] == 0)
                {
                for(j = 2*i;j < 1001 ;j+=i)
                {
                        if(primer[i] == 0)
                                primer[j] = -1;
                }
                }
        for(i = 2; i <1001; i++)
        {
                if(primer[i] == 0)
                        printf("%d is a primer\n",i);
        }
        }

}

int main()
{
primer();
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章