❶ 關於用C語言編寫高精度加減法
好像是哪個oj上的題目,直接模擬就行了,加減法都是從字元串的最後一個字元算起,如果*a + *b > '9'就進位,同時空大衡移動指針斗做 a--, b--,c--就行了。仿銷
❷ C語言 要求編寫一個簡單計算器的程序
#include<stdio.h>
void add(int a,int b,int c)
{
c=a+b;
printf("%d+%d = %d",a,b,c);
printf("\n");
}
void minus(int a,int b,int c)
{
c=a-b;
printf("%d-%d=%d",a,b,c);
printf("\n");
}
void multiplication(int a,int b,int c)
{
c=a*b;
printf("%d*%d=%d",a,b,c);
printf("\n");
}
void div(int a,int b,int c)
{
(float)c=(float)a/(float)b;
printf("%f/%f=%f",a,b,c);
printf("\n");
}
main()
{
int a,b,c;
char p;
printf("請輸入數字 A:");
scanf("%d",&a);
printf("請輸入數字 B:");
scanf("%d",&b);
printf("請輸入運算的符號:");
getchar();
p=getchar();
if(p=='+') add(a,b,c);else
if(p=='-') minus(a,b,c);else
if(p=='*') multiplication(a,b,c);else
if(p=='/') div(a,b,c);else
puts("沒有注冊這個運算符號\n");
}
❸ 用C語言設計一個簡單計算器
#include<stdio.h>
voidadd(inta,intb,intc)
{
c=a+b;
printf("%d ",c);
printf(" ");
}
voidminus(inta,intb,intc)
{
c=a-b;
printf("%d ",c);
printf(" ");
}
voidmultiplication(inta,intb,intc)
{
c=a*b;
printf("%d ",c);
printf(" ");
}
voiddiv(inta,intb,intc)
{
c=(float)a/(float)b;
printf("%f ",c);
printf(" ");
}
main()
{
inta,b,c;
charp;
puts("inputA: ");
scanf("%d",&a);
puts("inputB: ");
scanf("%d",&b);
puts("inputoperation: ");
getchar();
p=getchar();
if(p=='+')add(a,b,c);else
if(p=='-')minus(a,b,c);else
if(p=='*')multiplication(a,b,c);else
if(p=='/')div(a,b,c);else
puts("沒有注冊這個運算符號 ");
}
以上是設計的一個簡易計算器。可以進行相應的加減乘除。
❹ 輸入兩個數 計算加減乘除 c語言程序 簡單一點的程序我現在才大一
#include<stdio.h>
floatadd(floata,floatb)
{
return(a+b);
}
floatminus(floata,floatb)
{
return(a-b);
}
floatmultiply(floata,floatb)
{
return(a*b);
}
floatdivide(floata,floatb)
{
return(a/b);
}
intmain(void)
{
printf("Pleaseinserttwonumbers: ");
floata,b;
scanf("%f,%f",&a,&b);
floatresult;
result=add(a,b);
printf("Theresultofadditionis:%f ",result);
result空凱=minus(a,b);
printf("Theresultofminusis:%f ",result);
result備仔=仿虧汪multiply(a,b);
printf("Theresultofmultiplicationis:%f ",result);
result=divide(a,b);
printf("Theresultofdivisionis:%f ",result);
return0;
}
謝謝,望採納!加油!
❺ 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;
}