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

數字相加可擴展性c語言

發布時間: 2022-05-08 05:00:13

1. c語言如何實現多對大數相加

思路:

1.輸入xxxx+xxxxxx,已『+』分割成兩個子串。

2.逆序兩個子串,末位變成首位對齊,按位相加,大於10則向後位進一。

3.需要考慮到兩個數長度不同的情況。

4.再把最後的結果逆序輸出,就得到了最終正向相加的結果。

思路實現代碼如下(在vc6.0中編譯通過):

#include<stdio.h>
#include<string.h>
voidreverse(char*s,intlen);
char*addLargeNumber(char*s1,char*s2);
intmain(intargc,charconst*argv[])
{
charstr[100];
intlen[10];//截取的每個子串的長度
scanf("%s",str);
char*sep="+-*/";
char*p=strtok(str,sep);
char*s=p;
char*k=p;
len[0]=strlen(p);
reverse(p,len[0]);
puts(p);
while(1)
{
s=strtok(NULL,sep);
if(s==NULL)
{
break;
}
len[1]=strlen(s);
reverse(s,len[1]);
puts(s);
k=s;//
}
printf("accesstoaddLargeNumber ");
p=addLargeNumber(p,k);
len[2]=strlen(p);
reverse(p,len[2]);
puts(p);
return0;
}
//反轉一個字元串
voidreverse(char*s,intlen)
{
chartemp;
inti;
for(i=0;i<len/2;i++)
{
temp=s[i];
s[i]=s[len-1-i];
s[len-1-i]=temp;
}

}
//接收兩個字元串,把長度小的加到長度大的串上,返回相加後的串
char*addLargeNumber(char*s1,char*s2)
{
char*p=s1;
char*q=s2;
chark;
inti;
printf("子串1的長度=%lu子串2的長度=%lu ",strlen(p),strlen(q));
intlen=strlen(q);
//確保p指向長度較長的串。確保len的值為較小的串的長度。
if(strlen(s1)<strlen(s2))
{
len=strlen(p);
q=s2;
p=s1;
}
intdifflen=strlen(p)-strlen(q);//兩個子串長度的差值。
//printf("len=%ddifflen=%d ",len,difflen);
for(i=0;i<len;++i)
{
inta=p[i]+q[i]-96;
//printf("a=%d ",a);
if(a>=10)
{
k=a-10+48;
p[i+1]+=1;
}
else
{
k=a+48;
}
//printf("k=%c ",k);
p[i]=k;
printf("p[%d]=%c ",i,p[i]);
}
//解決較長串後一位如果被進位的情況。例如:1379+128(假設兩個已逆序的串)或者15999+148
for(i=0;i<difflen;i++)
{
if(p[len+i]==58)
{
p[len+i]-=10;
if(i==difflen-1)
{//當i指向最後一個有效數字時,並且當前位是『:』,則將其後一位賦為結束符
p[len+i+1]=49;//這種是賦值符號,是將'1'賦給p[i]。對比下面的運算符
p[len+difflen+1]=0;
}
else
{
p[len+i+1]+=1;//這種是運算符,是將p[i]的ASCII碼加1.
}
printf("p[%d]=%c ",len+i,p[len+i]);
}
else
{
break;
}
}
printf("相加之後的串長度=%lu ",strlen(p));
puts(p);
returnp;
}

2. 用C語言寫一段,可以計算任意兩個輸入數的和的程序

C語言任意兩個數字的求和程序設計如下:

#include <stdlib.h>

intmain()

{

inta,b,sum;

printf("請輸入兩個整數:");

scanf("%d %d",&a,&b);

sum=a+b;

printf("這兩個數的和是:%d ",sum);

printf("計算完成,謝謝使用!");

return0;

}


C語言指定兩個數字的求和程序設計如下:

#include<stdio.h>

main()

{

inta,b,sum;

a=123;

b=789;

sum=a+b;

printf("sumis%d ",sum);

}

(2)數字相加可擴展性c語言擴展閱讀:

完整的c程序的基本構成:

數據類型、常量與變數、數組、指針、字元串、文件輸入/輸出、運算、關鍵字、流程式控制制關鍵字、跳轉結構、分支結構、語法結構、順序結構、選擇結構、循環結構。

c語言的運算符號:

比較特別的是,比特右移(>>)運算符可以是算術(左端補最高有效位)或是邏輯(左端補 0)位移。例如,將 11100011 右移 3 比特,算術右移後成為 11111100,邏輯右移則為 00011100。因算術比特右移較適於處理帶負號整數,所以幾乎所有的編譯器都是算術比特右移。

運算符的優先順序從高到低大致是:單目運算符、算術運算符、關系運算符、邏輯運算符、條件運算符、賦值運算符(=)和逗號運算符。

3. 我想知道怎麼用C語言解決輸入一個數字求各位數字相加的和

樓主,不用循環似乎不行,要簡單可以使用字元數組來接收輸入的數字再求和。
void main()
{
char c[111];
int i=0;
int a=0;
scanf("%s",c);//輸入一個數字,在111位之內,還想輸入得更大,請把數組改大。

while(c[i]!='\0') //判斷是否讀到字元串的結尾。
{a=a+(c[i]-'0'); //c[i]指定的字元減去字元'0'就是相關的整型數字,比如
c[i]的字元為1,則'1'-'0'就得到整數1。然後求和。
i++;}
printf("%d",a);
system("pause");
}

4. 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);
}

5. C語言中 有沒有一種運算可以將位元組擴展,比如:abababab 擴展為aabbaabbaabbaabb

如果是顯示的話, 很簡單. printf("%8s", (char*)pstr); %s中加個數字就行了. 32位就%32s .
如果是真正擴展, 要這樣. 8位char 16位short .
char a = 0xAA; //10101010;
short b= 0;
short b = a; //這樣就擴展了.
如果是字元串.也是一樣先清空.從尾部倒著填充. 比如把把一個字元串向左擴展32位.
#include "string.h"
#include "stdio.h"

void main()
{
char p1[33]={0} ;//設置結束
memset(p1, ' ', 32);// 填充空格
char *p2= "test33133311111111111111";//測試字元串

int i = 31;//循環填充.
int j = strlen(p2)-1;
for(; j>=0; i--,j--)
{
p1[i] = p2[j];
}

puts(p1);

}

6. c語言編寫兩個數字相加

scanf("%e,%e",&a,&b);//因為你的數據類型是double所以不能用%d(這個是整數的)
printf調用類似

7. 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);

}

(7)數字相加可擴展性c語言擴展閱讀

(C語言)常見字元函數和字元串函數

1、strlen

功能:計算字元串長度,不包含』』

返回值:返回字元串的字元數

說明:strlen() 函數計算的是字元串的實際長度,遇到第一個』』結束;參數指向的字元串必須以 』 『結束。函數返回值一定是size_t ,是無符號的。如果你只定義沒有給它賦初值,這個結果是不定的,它會從首地址一直找下去,直到遇到』』停止。

sizeof返回的是變數聲明後所佔的內存數,不是實際長度,此外sizeof不是函數,僅僅是一個操作符,strlen()是函數。

2、strcpy

功 能: 將參數src字元串拷貝至參數dest所指的地址

返回值: 返回參數dest的字元串起始地址

說明:源字元串必須以』』結束。會將源字元串的』』拷貝到目標空間。目標空間必須可變。如果參數dest所指的內存空間不夠大,可能會造成緩沖溢出的錯誤情況,在編寫程序時需特別留意,或者用strncpy()來取代。

8. C語言 如何讓兩個數字相加

代碼沒錯。
運行的時候,你首先要輸入a和b的值,空格分隔,輸入完回車後就會顯示c的值了,就是a和b的和。

9. C語言中怎麼實現兩個超大整數的相加減乘除

#include <string.h>

#include <stdio.h>

#include <stdlib.h>

#define N 100

int main(int argc, char const *argv[])

{

char arr[N] = {};

gets(arr);

char brr[N] = {};

gets(brr);

int len1,len2,i = 0,j = 0;

len1 = strlen(arr);

len2 = strlen(brr);

int len = len1>len2?len1:len2;

/* c99之後數組初始化支持整型表達式,稱為可變長數組,但按照c89的標準是不對的

int num1[len]; //將字元串轉換成翻轉的整型數組

int num2[len];

*/

int* num1 = (int*)malloc(len*sizeof(int));

int* num2 = (int*)malloc(len*sizeof(int));

for (i = 0; i < len; i++)

{

num1[i] = i<len1 ? arr[len1-i-1]-'0':0;

}

for (j = 0; j < len; j++)

{

num2[j] = j<len2 ? brr[len2-j-1]-'0':0;

}

//int sum[len]; //定義和數組

int* sum = (int*)malloc(len*sizeof(int));

int flag=0; //設進位符

for (i = 0; i < len; i++)

{

sum[len-1-i] = (num1[i]+num2[i]+flag)%10;

flag = (num1[i]+num2[i]+flag)/10;

}

if (flag == 1) printf("1"); //如果最高位有進位 則輸出一個1

for (i = 0; i < len; i++)

{

printf("%d",sum[i]);

}

printf(" ");

free(num1);

free(num2);

free(sum);

num1 = NULL;

num2 = NULL;

sum = NULL;

return 0;

}

(9)數字相加可擴展性c語言擴展閱讀:

gets()函數用法

gets是從標准輸入設備讀字元串函數。

函數原型:char*gets(char*str);

功能為:從stdin流中讀取字元串,直至接受到換行符或EOF時停止,並將讀取的結果存放在buffer指針所指向的字元數組中。換行符不作為讀取串的內容,讀取的換行符被轉換為『\0』空字元,並由此來結束字元串。

注意:不會判斷上限,以回車結束讀取,所以程序員應該確保buffer的空間足夠大,以便在執行讀操作時不發生溢出。使用時需要包含stdio.h頭文件

參數

str為字元串指針,用來存放讀取到的數據。

返回值

讀入成功,返回與參數buffer相同的指針;讀入過程中遇到EOF(End-of-File)或發生錯誤,返回NULL指針。所以在遇到返回值為NULL的情況,要用ferror或feof函數檢查是發生錯誤還是遇到EOF。

10. C語言 多組數據 數字相加的問題

for(i=1;i<=T;i++,s=0)
這樣就可以了,執行完一次把s賦值0,。