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,。