A. c語言中,如何「利用字元數組實現兩個大整數的加法」
#include <string.h>
#include <stdio.h>
void f1(char *a,char *b) //一個函數
{
char t[101];
if(strlen(a)<strlen(b)) //比較前的准備
{
t[101]=0;
strcpy(t,a); //把a中內容拷貝到字元串t中
strcpy(a,b);
strcpy(b,t); //以上三條實現a與b的交換
}
}
void f(char *t1,char *t)
{
int i,n;
n=strlen(t1); //n是字元串t1的長度
for(i=0;i<n;i++)
t[i]=t1[n-1-i]; //把t1中的內容賦給與它的下標對稱的下標t中
t[n]='\0'; //t最後一個位置賦結束字元
}
void f2(char *b,int q,int l)
{
char t[101]; //定義一個字元數組
int i;
for(i=0;i<q-l;i++)
t[i]='0';
t[q-l]='\0';
strcat(b,t); //把t連接到b去除結束字元『/0』的字元後,保持和字元串a長度一致,便於運算
}
void add(char *a,char *b,char *s,int q)
{
int i;
strcpy(s,a); //把字元串a拷貝到字元串s中
for(i=0;i<q;i++)
if(s[i]+b[i]>105) //判斷兩個數字的和是否大於十 ,若大於10考慮進位問題
{
s[i]+=(b[i]-58); //大於10進位,s[i]加上進位後的數字,運算後賦給s[i]
s[i+1]++; //s[i+1]進位加1,運算後賦給s[i]
}
else
s[i]+=(b[i]-48); //否則不進位,運算後賦給s[i]
}
void print(char *s)
{
int i,l;
l=strlen(s);
if(s[l-1]>'9'||s[l-1]<'0')
{
printf("1"); //列印1
for(i=l-2;i>=0;i--)
printf("%c",s[i]); //其餘的原樣輸出
}
else
for(i=l-1;i>=0;i--)
printf("%c",s[i]); //直接輸出
}
main()
{
char a[101],b[101],a1[101],b1[101],sum[101]={0};
int q,l;
printf("請輸入大整數字元a\n ");
gets(a1); //輸入字元a1
printf("請輸入大整數字元b\n ");
gets(b1); //輸入字元b1
f1(a1,b1);//調用函數f1
f(a1,a); //調用f
f(b1,b); //調用f
q=strlen(a); //q是字元串a的長度
l=strlen(b); //l是字元串b的長度
f2(b,q,l); //調用f2使a,b長度一致
add(a,b,sum,q); //調用add,運算a,b字元串的結果
printf("a+b=");
print(sum); //調用print函數
printf("\n");
}
我只把一些看起來需要注釋的都注釋了,一些特別簡單的基礎的·應該不用注釋了,實際上只要多看一些代碼,這些都是慢慢可以看懂得。
B. c語言把數字字元串中的數字相加的程序
代碼如下:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char str[100];
char buf[10];
int i;
int n = 0;
bool flag = 0;
int j = 0;
//gets(str);
scanf("%s", str);
for (i = 0; i != strlen(str); ++ i)
{
if (str[i] >= '0' && str[i] <= '9')
{
buf[j] = str[i];
j++;
flag = 1;
}
else if (flag)
{
n += atoi(buf);
memset(buf,0,10);//清空緩存區
flag = 0;
j = 0;
}
}
printf("%s",buf);
printf("%d ", n);
}
(2)c語言使用char數組實現數字相加擴展閱讀
(C語言)常見字元函數和字元串函數
1、strlen
功能:計算字元串長度,不包含』 』
返回值:返回字元串的字元數
說明:strlen() 函數計算的是字元串的實際長度,遇到第一個』 』結束;參數指向的字元串必須以 』 『結束。函數返回值一定是size_t ,是無符號的。如果你只定義沒有給它賦初值,這個結果是不定的,它會從首地址一直找下去,直到遇到』 』停止。
sizeof返回的是變數聲明後所佔的內存數,不是實際長度,此外sizeof不是函數,僅僅是一個操作符,strlen()是函數。
2、strcpy
功 能: 將參數src字元串拷貝至參數dest所指的地址
返回值: 返回參數dest的字元串起始地址
說明:源字元串必須以』 』結束。會將源字元串的』 』拷貝到目標空間。目標空間必須可變。如果參數dest所指的內存空間不夠大,可能會造成緩沖溢出的錯誤情況,在編寫程序時需特別留意,或者用strncpy()來取代。
C. C語言數組怎樣求和,
先獲取數組長度,然後用for循環,從數組中獲取值進行累加求和。
#include
#include
int main()
{
int n;
int val;
int * a;
int sun = 0, i;
printf("請輸入數組的長度:");
scanf("%d", &n);
printf(" ");
a = (int *)malloc(n * sizeof(int));//為數組a動態分配內存
for(i = 0; i < n; i++)
{
printf("請輸入數組的第%d個元素的值:", i+1);
scanf("%d", &val);
printf(" ");
a[i] = val;
}
for (i = 0; i < n; i++)
{
sun+=a[i];//sun+=a[i]相當於sun=sun+a[i];
}
printf("sun = %d ",sun);
free(a);//釋放a動態分配的內存
return 0;
}
(3)c語言使用char數組實現數字相加擴展閱讀:
一個數組中的所有元素具有相同的數據類型(在C、C++、Java、pascal中都這樣。但也並非所有涉及數組的地方都這樣,比如在Visual Foxpro中的數組就並沒這樣的要求)。當然,當數據類型為 Variant 時,各個元素能夠包含不同種類的數據(對象、字元串、數值等等)。可以聲明任何基本數據類型的數組,包括用戶自定義類型和對象變數。
如果要用戶輸入的是一個數組,一般是用一個循環,但是在輸入前也需要固定數組的大小。
compact跟變長數組沒有太大的關系,也應該用不到變長數組。因為一般的傳數組到函數中就是傳數組的地址和元素的個數的,那隻是一個提示,不是要求。
D. C語言數組相加
1,gets需要判斷是否讀取正確
2,思路:xyz+zyx 即求數字倒序然後相加
int main()
{
char buf[64];
int a = 0, sum = 0;
if(gets(buf) == NULL)
printf("gets error, %s\n);
a = strlen(buf);
for(int i = 0;a>1; --a, ++i)
{
sum = buf[i] + buf[a];
}
printf(sum, %s\n);
return 0;
}
沒編譯你試一下,主要是方法要正確,你的有點亂,得加點注釋要不看起來麻煩
還有 你的:a[strlen(str)]='\0';是不是不對,a[strlen(str)-1]='\0'; ?
E. c語言大數的加法用數組char指針實現
做大數加法,首先要能保存大整數。C能提供的最大的整數類型也就是long long int了吧,還是有上限。用整數類型這條路不通。所以想到把大整數看作字元串(即char數組),一位數字就是數組的一個元素。數組能有多長?幾萬位不止,應付大數加法很輕松。
基本做法就是把兩個加數各自存為字元串。(怎麼把數字轉換成字元?每個數字加'0'就行了。比如 '7'就是7+'0'。)然後從個位起逐位加。(加的時候把字元變回數字,'7'-'0'就是7。)算出來的結果再轉成字元存到第三個數組的相應位里,遇到進位就把上一位加個1,簡單的很。最後第三個字元串就是結果,用puts列印出來就行了。做的時候為了方便可能會把個位存在數組第一位,那樣的話就倒序輸出字元串就行了。
代碼自己寫。
F. 兩個字元串型數組如何相加(C語言)
你可以把字元串分解嗎,因為第一個字元被排除
所以如果你需要atof 可以這樣用
float ff=atof(&a[1]);
是不是。
借貸關系 你就直接取就行了 比如char jd=a[0];等等
G. C語言實現100位以內大數的加法,只用char,數組,循環。
用兩個char型字元串就可以了。測出長度,以長的為被加數,短的為加數。舉例代碼如下:
//#include"stdafx.h"//Ifthevc++6.0,withthisline.
#include"stdio.h"
#include"string.h"
intmain(void){
chara[102],b[102],*pl,*ps,ll,ls;
printf("Pleaseenter2integers... ");
scanf("%[0-9]%[0-9]",a+1,b+1);
if((ll=strlen(a+1))>(ls=strlen(b+1)))
pl=a,ps=b;
else{
pl=b,ps=a;
ll^=ls,ls^=ll,ll^=ls;
}
for(*pl=*ps='0';ls>0;ls--,ll--)
if((pl[ll]+=ps[ls]-'0')>'9')
pl[ll]-=10,pl[ll-1]++;
while(ll)
if(pl[ll]>'9')
pl[ll]-=10,pl[ll---1]++;
elsebreak;
printf("a+b=%s ",*pl=='0'?pl+1:pl);
return0;
}
H. c語言 利用數組實現加法
我測試過了,含有100這樣帶有0的數字的時候沒有問題,從代碼分析帶0也不會有問題。
至於你說的兩個加數位數不相同出錯。問題出在下面幾行:
for(i=0;(k[i]!='\0'||b[i]!='\0');i++)
{
if(sign==1)
{
j[i]=k[i]+b[i]-95;
sign=0;
}
else
j[i]=k[i]+b[i]-96;
上面的代碼片段。for循環的第二個表達式成立是或關系。如果其中一個加數位數不夠,後面的「-95」和「-96」將多減去一個48,所以由char型轉到int型的時候就出錯了。
建議你使用strlen求一下兩個被加數長度。將位數小的高位用0補齊就行了。
I. C語言 數字字元相加怎麼實現
#include<stdio.h>
voidmain(){charas[]={"11"},bs[]={"1"};inta,b,c,i;
i=a=0;while(as[i]!=0){a*=10;a+=as[i]-'0';i++;}
i=b=0;while(bs[i]!=0){b*=10;b+=bs[i]-'0';i++;}
c=a+b;
printf("%s+%s=%d ",as,bs,c);
}