當前位置:首頁 » 編程語言 » c語言編程數字增大
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言編程數字增大

發布時間: 2022-05-25 05:10:42

c語言編程 數值從0增加到85,用IF 語句。。求大神幫忙

#include<stdio.h>
int main(){
int i=1;
while(1){
if(i<=85)
i++;
else
break;
}
printf("%d",i);
}

⑵ c語言編程實現:一組數字的自動增長,並輸出到指定文件中去

簡單的整理,僅供參考:


#include<stdio.h>

#defineBUFFER_LEN3
#defineBUFFER_SIZE64

voidgetData(charbuffer[BUFFER_LEN][BUFFER_SIZE],size_tsize,int*repeatTimes)
{
printf("plz,input3strings,e.1251511212151564646165 ");

scanf_s("%s%s%s",buffer[0],size,buffer[1],size,buffer[2],size);

printf("plz,inputyourrepeattimes:");

scanf_s("%d",repeatTimes);

}
voidsaveInfo(constchar*filePath,charbuffer[BUFFER_LEN][BUFFER_SIZE],intrepeatTimes)
{
FILE*pFile=NULL;;
if(fopen_s(&pFile,filePath,"w+")!=EOF)
{
for(inti=0;i<repeatTimes;++i)
{
if(i!=repeatTimes-1)
{
if(fprintf_s(pFile,"%s,%s,%s,",buffer[0],buffer[1],buffer[2])==EOF)
{
printf("savedataerror ");
}
}
elseif(fprintf_s(pFile,"%s,%s,%s",buffer[0],buffer[1],buffer[2])==EOF)
{
printf("savedataerror ");
}
}

fclose(pFile);
}
}

voidrepeatSaveData()
{
charcmd=0;

charbuffer[BUFFER_LEN][BUFFER_SIZE]={0};

intrepeatTimes=0;

do{

fflush(stdin);

getData(buffer,BUFFER_SIZE,&repeatTimes);

printf(": ");

for(inti=0;i<BUFFER_LEN;++i)
{
printf("%s ",buffer[i]);
}

printf("repeat%dtimes!ture:1,reinput:0 ",repeatTimes);

fflush(stdin);

while(true)
{
cmd=getchar();
if(cmd=='1'||cmd=='0')break;
}

}while(cmd=='0');

saveInfo("r.txt",buffer,repeatTimes);
}

intmain(intargc,char*argv[])
{
repeatSaveData();

return0;
}

⑶ C語言程序設計,比較數字大小的實例

下面是一個比較三個數的例子:

#include <stdio.h>
int main()
{
int t,a,b,c;
scanf("%d%d%d",&a,&b,&c);
if(a<b)
{
t=a,a=b,b=t;
}
if(a<c)
{
t=a,a=c,c=t;
}
if(b<c)
{
t=b, b=c, c=t;
}
printf("%d %d %d\n",c,b,a);
return 0;
}
原理就是運用冒泡演算法,把最大的數浮在最上面,而小的數就下沉,最後就輸出。

⑷ c語言編程,這個比較數字大小的邏輯哪裡錯了

計算最大值之後,inter1是最大值,最大值跟inte2比較結果必然是有問題的。問題主要是你沒保存所有數據。一般來說,實現數據交換但是要不影響本身數據,都是通過一個中間變數temp實現交換,可以保證數據不錯。你這個明顯就是中間丟掉了inter1。

其次,比較大小,按你的代碼量,用冒泡法加數組更簡單,到時候直接取a[0],a[n-1]就是

⑸ c語言編程,怎麼處理上千位的大數字啊

先看你的精度要求,如果不要求精確可以用實數類型,如果要求精確,就要用高精度。高精度就是用數組來儲存每一位,自己編寫加減乘除的函數(模擬人進行一位一位地計算),數組大小根據需要開,也可以動態分配。具體可以查高精度運算的有關資料,網上很多

⑹ C語言基礎編程問題:比較5個數字的大小

#include
int
main()
{
int
number[5]
=
{0};//存儲五個數
int
cur
=
0;//當前要比較的數的下標,不能是float
float
max
=
number[0];//當前最大的數值,初始為數組中第一個數
int
index
=
0;//當前最大數值在數組中的位置
printf("**********尋找最大值***********\n");
//獲得五個數
while(index
<
5)
{
printf("請輸入第%d個數:",
index+1);//這里
scanf("%d",&number[index]);
index++;/////////////////////////////////這里
}
//
index=0;
while(cur
<
5)
{
if
(max
<
number[cur])//當這個數比前面數中最大的數還要大時就替換掉//////////////////////////////////////////
{
max
=
number[cur];//////////////////////////////cur
非index
index
=
cur;
}
cur++;
}
printf("最大值是數組中第%d個數,值為%0.6f\n",
index
+
1,
max);
getch();
return
0;
}

⑺ c語言編程:輸入一個數字n,再輸入n個數,將這個n個數從小到大輸出。

int
n,
i;
scanf(輸入n的值);
//輸入個數
int
*array;
//把需排序的數列定義為數組。這里需要指出的是,如果定義為array[n-1],因為你的n在編譯時未賦值,所以編譯是不會通過的。於是這里直接將它定義為一個指針,賦值方法跟數組相同。但是個數太多就不能這么做了
for(i
=
0;
i
<
n;
i++){
//輸入需要排序的數列
scanf(輸入數字到數組array);
}
//todo:冒泡法排序
//輸出排序後的數組

⑻ c語言編程:當數字太大時就出錯

沒有運行你的程序,只是大概看了一下。
首先假設你這程序是正確無誤的,但是循環的次數太多了,當limit較大時,計算量將非常龐大,所以是需要較長時間的,你不妨多等幾分鍾。

⑼ c語言編程,任意大的數

#include <stdio.h>
#include <string.h>
typedef struct bigint
{
char *num; //指向長整數數組(序號0中保存著最低位)
char minus; //符號(1表示正數,-1表示負數)
int digit; //保存該數的位數(實際位數)
}BIGINT, *pBIGINT;
void BigIntTrans(pBIGINT num); //字元串轉數字
void BigIntMul(pBIGINT num1, pBIGINT num2, pBIGINT result); //乘法函數
void BigIntAdd1(pBIGINT num1, pBIGINT num2, pBIGINT result); //同號數相加
void BigIntAdd(pBIGINT num1, pBIGINT num2, pBIGINT result); //加法函數
void BigIntSub1(pBIGINT num1, pBIGINT num2, pBIGINT result); //異號相減函數
void BigIntSub(pBIGINT num1, pBIGINT num2, pBIGINT result); //減法函數
void BigIntDiv(pBIGINT num1, pBIGINT num2, pBIGINT result, pBIGINT resie); //除法函數
void BigIntPrint(pBIGINT result); //輸出大整數
int BigIntEqual(pBIGINT num1, pBIGINT num2); //兩數大小比較

void BigIntTrim(pBIGINT num1) //整理大整數,去掉前面多餘的0,並使調整其位數
{
int i;
for (i = num1->digit - 1; i >= 0; i--)
{
if (num1->num[i] != 0)
break;
}
if (i < 0) //若余數全部為0
{
num1->digit = 1; //設置余數位數為1
num1->num[0] = 0;
} else
num1->digit = i + 1; //余數位數
}
void BigIntTrans(pBIGINT num1) //將字元串轉為數字表示
{
char *temp; //臨時數組
int i, k, len;
len = strlen(num1->num); //字元串長度
if (!(temp = (char *) malloc(sizeof(char) * len))) //分配內存
{
printf("內存分配失敗!\n");
exit(0);
}
i = 0;
num1->minus = 1; //保存為正數
if (num1->num[0] == '-') //判斷是否為負數
{
num1->minus = -1; //保存為負數
i++;
}
k = 0; //數字位數計數器
while (num1->num[i] != '\0') //字元串未結束
{
if (num1->num[i] >= '0' && num1->num[i] <= '9') //為數字0~9
{
temp[k] = num1->num[i] - '0'; //將ASCII碼轉換為對應數字
k++;
}
i++;
}

for (i = 0; i < num1->digit; i++) //清空數組各元素
num1->num[i] = 0;
num1->digit = k; //轉換後的數據位數
for (i = 0, k--; k >= 0; k--, i++) //將臨時數組各位反置保存到數組num中
num1->num[i] = temp[k];
BigIntTrim(num1); //整理輸入的大整數
}
void BigIntPrint(pBIGINT result) //輸出大整數
{
int j;
if (result->minus == -1) //是負數
printf("-"); //輸出負數
if (result->digit == 1 && result->num[0] == 0) //若大整數為0
printf("0");
else //不為0
{
for (j = result->digit - 1; j >= 0; j--) //從高位到低位輸出
printf("%d", result->num[j]);
}
}
int BigIntEqual(pBIGINT num1, pBIGINT num2) //比較絕對值大小
{
int i;
if (num1->digit > num2->digit) //num1的位數大於num2
return 1;
else if (num1->digit < num2->digit) //num1的位數小於num2
return -1;
else //兩數位數相等
{
i = num1->digit - 1; //num1的數據位數
while (i >= 0) //從高位向低位比
{
if (num1->num[i] > num2->num[i]) //num1對應位大於num2
return 1;
else if (num1->num[i] < num2->num[i]) //num1對應位小於num2
return -1;
else
i--; //比較下一位
}
}
return 0; //相等
}
void BigIntAdd(pBIGINT num1, pBIGINT num2, pBIGINT result)
{
int i;
i = BigIntEqual(num1, num2); //比較兩數絕對值大小
if (i < 0) //num1絕對值小於num2
{
pBIGINT temp;
temp = num1; //交換兩數
num1 = num2;
num2 = temp;
}
if (num1->minus * num2->minus < 0) //符號不同,則執減法
{
if (i == 0) //兩數相等
{
result->digit = 1; //結果長度為一位數,就是數值0
result->num[0] = 0; //結果值為0
result->minus = 1; //結果設為正號
return; //返回
}
BigIntSub1(num1, num2, result); //調用相減函數完成異號相加的情況
} else
BigIntAdd1(num1, num2, result); //調用相加函數完成同號相加
}
void BigIntAdd1(pBIGINT num1, pBIGINT num2, pBIGINT result)
{
int i, carry;
carry = 0;
result->minus = num1->minus; //保存符號
for (i = 0; i < num1->digit; i++) //將被加數復制到結果數組中
result->num[i] = num1->num[i];
for (i = 0; i < num2->digit; i++) //num2中的數小,可能位數也小些
{
result->num[i] = result->num[i] + num2->num[i] + carry; //將對應位的數和進位數相加
carry = result->num[i] / 10; //計算進位數據
result->num[i] = result->num[i] % 10; //保留一位
}
if (carry) //若最後還有進位
result->num[i] = result->num[i] + carry;
BigIntTrim(result); //整理結果
}
void BigIntSub1(pBIGINT num1, pBIGINT num2, pBIGINT result) //異號相減函數
{
int i, borrow;
result->minus = num1->minus; //因num1絕對值比num2大,結果符號與num1相同
borrow = 0;
for (i = 0; i < num1->digit; i++) //將被減數的內容復制到結果中
result->num[i] = num1->num[i];
for (i = 0; i <= num2->digit; i++)
{
result->num[i] = result->num[i] - num2->num[i] - borrow; //num1減去num2,並減去低位的借位
if (result->num[i] < 0) //若為負數
{
result->num[i] = 10 + result->num[i]; //向高位借位
borrow = 1; //設置借位值
} else
borrow = 0;
}
if (borrow == 1)
result->num[i] = result->num[i] - borrow;
BigIntTrim(result);
/*i = num1->digit;
while (i > 0)
{
if (result->num[i] == 0)
i--;
else
break;
}
result->digit = i; //保存結果位數*/
}
void BigIntSub(pBIGINT num1, pBIGINT num2, pBIGINT result) //減法函數
{
num2->minus = -1 * num2->minus; //將減數的符號取反
BigIntAdd(num1, num2, result); //調用加法函數
}
void BigIntMul(pBIGINT num1, pBIGINT num2, pBIGINT result)
{
char carry, temp;
int i, j, pos;
for (i = 0; i < num1->digit + num2->digit; i++) //結果數組和中間數組清0
result->num[i] = 0;
for (i = 0; i < num2->digit; i++) //用乘數的每1位乘以被乘數
{
carry = 0; //清除進位
for (j = 0; j < num1->digit; j++) //被乘數的每1位
{
temp = num2->num[i] * num1->num[j] + carry; //相乘並加上進位
carry = temp / 10; //計算進位carry
temp = temp % 10; //計算當前位的值
pos = i + j;
result->num[pos] += temp; //計算結果累加到臨時數組中
carry = carry + result->num[pos] / 10; //計算進位
result->num[pos] = result->num[pos] % 10;
}
if (carry > 0)
{
result->num[i + j] = carry; //加上最高位進位
result->digit = i + j + 1; //保存結果位數
} else
result->digit = i + j; //保存結果位數
}
result->minus = num1->minus * num2->minus; //結果的符號
}
void BigIntDiv(pBIGINT num1, pBIGINT num2, pBIGINT result, pBIGINT resie) //除法函數函數 》?躒サ臀壞慕櫛?雗um1相同 數
{
BIGINT quo1, resio1, quo2;
int i, j, k, m; //k保存試商結果,m保存商的位數
char t;
result->minus = num1->minus * num2->minus; //商的符號
resie->num = (char *) malloc(sizeof(char) * num2->digit); //分配余數的內存空間
resie->digit = num2->digit+1; //設置余數的初始位數與除數相同
for (i = 0; i < resie->digit; i++) //將余數全部清0
resie->num[i] = 0;
m = 0;
for (i = num1->digit - 1; i >= 0; i--)
{
resie->digit=num2->digit+1; //重新設置余數的位數比除數多一位
for (j = resie->digit - 1; j > 0; j--) //移余數
resie->num[j] = resie->num[j - 1]; //將序號低位的數據移向高位(實際是將余數中的最高位去除)
resie->num[0] = num1->num[i]; //復制被除數中的一位到余數的最低位中
BigIntTrim(resie);//整理余數
k = 0; //試商
while (BigIntEqual(resie, num2) >= 0) //比較余數與除數的大小
{
BigIntSub1(resie, num2, resie); //用余數減去除數,差值保存在余數中
k++; //試商加1
}
result->num[m++] = k; //保存商
}
result->digit = m; //保存商的位數
for (i = 0; i < m / 2; i++) //將商各位反轉(在計算過程中序號0保存的是商的高位)
{
t = result->num[i];
result->num[i] = result->num[m - 1 - i];
result->num[m - 1 - i] = t;
}
BigIntTrim(result); //整理商
BigIntTrim(resie); //整理余數
}
int main()
{
BIGINT num1, num2, result, resie; //參與運算的數、結果、余數
int i = 0, len;
char op;
printf("輸入最大數的位數:");
scanf("%d", &len);
if (!(num1.num = (char *) malloc(sizeof(char) * (len + 1))))
{
printf("內存分配失敗!\n");
exit(0);
}
num1.digit = len + 1;
if (!(num2.num = (char *) malloc(sizeof(char) * (len + 1))))
{
printf("內存分配失敗!\n");
exit(0);
}
num2.digit = len + 1;
if (!(result.num = (char *) malloc(sizeof(char) * (2 * len + 1))))
{
printf("內存分配失敗!\n");
exit(0);
}
result.digit = 2 * len + 1;
for (i = 0; i < result.digit; i++) //清空結果集
result.num[i] = 0;
printf("選擇大整數的運算(+、-、*、/):");
fflush(stdin);
scanf("%c", &op);
switch (op)
{
case '+':
printf("\n輸入被加數:");
scanf("%s", num1.num);
printf("\n輸入加數:");
scanf("%s", num2.num);
BigIntTrans(&num1);
BigIntTrans(&num2);
BigIntAdd(&num1, &num2, &result); //加法
break;
case '-':
printf("\n輸入被減數:");
scanf("%s", num1.num);
printf("\n輸入減數:");
scanf("%s", num2.num);
BigIntTrans(&num1);
BigIntTrans(&num2);
BigIntSub(&num1, &num2, &result); //減法
break;
case '*':
printf("\n輸入被乘數:");
scanf("%s", num1.num);
printf("\n輸入乘數:");
scanf("%s", num2.num);
BigIntTrans(&num1);
BigIntTrans(&num2);
BigIntMul(&num1, &num2, &result); //乘法
break;
case '/':
printf("\n輸入被除數:");
scanf("%s", num1.num);
printf("\n輸入除數:");
scanf("%s", num2.num);
BigIntTrans(&num1);
BigIntTrans(&num2);
if (num2.digit == 1 && num2.num[0] == 0) //大整數為0
printf("除數不能為0!\n");
else
BigIntDiv(&num1, &num2, &result, &resie); //除法法
break;
}
if (op == '/')
{
if (!(num2.digit == 1 && num2.num[0] == 0)) //為除法且除數不為0
{
printf("商:");
BigIntPrint(&result);
printf("\t余數:");
BigIntPrint(&resie);
}
} else
{
printf("\n結果:");
BigIntPrint(&result);
}

getch();
return 0;
}

⑽ c語言編程數據太大無法輸出怎麼辦,比如2的100次方

在任何一種語言中,精度和取值范圍都是一對矛盾。我理解您的意思,這里說的是整型。在c中,整型有三類數據類型,char,short,int,每一類又有unsigned和signed,即無符號和有符號兩種。
在32位系統中,char佔一個位元組,short占兩個位元組,int佔4個位元組。對於整數來說,精度都一樣,只要沒有進行取捨。所以int的取值范圍最大。有符號型的范圍為-2^31~2^31,無符號int范圍為0~2^32.
對於更大的整數,c的基本數據類型就無能為力了。常用的方法是利用數組進行數的范圍的擴大,例如表示2^100,我可以建立一個4元素的int數組num:
int
num[4];
然後我用num[0]表示從個位開始的9位數(2^31略等於2*10^9),然後num[1]表示接下來的9位,以此類推。
當然這種情況下,你需要為這些大數的運算,例如加減乘除,專門編寫適合你的數據類型的演算法。相對來說還是比較繁瑣的。
但是java提供大數這種數據類型,不過我不是特別懂。有興趣可以關注一下。