接收数字字符每一位相加
代码:
#include <stdio.h>
#include <string.h>
//获取一行信息
void getlines(char s[], int size)
{
fgets(s, size, stdin);
if (s[strlen(s) - 1] == '\n')
s[strlen(s) - 1] = '\0';
}
//实现反转
void rever_str(char s[])
{
int i;
int len = strlen(s);
char t;
for (i = 0; i < len / 2; i++)
{
t = s[i];
s[i] = s[len - 1 - i];
s[len - 1 - i] = t;
}
}
//累加
void add_str(char s1[], char s2[], char s3[])
{
int i;
int minlen = (strlen(s1) > strlen(s2)) ? strlen(s2) : strlen(s1);
int maxlen = (strlen(s1) > strlen(s2)) ? strlen(s1) : strlen(s2);
int tmp = 0;
//123456
//123
for (i = 0; i < minlen; i++)
{
s3[i] = ((s1[i] - 48) + (s2[i] - 48) + tmp) % 10 + 48;
tmp = ((s1[i] - 48) + (s2[i] - 48)) / 10;
}
if (strlen(s1) > strlen(s2))
{
if (tmp == 1)
{
for (i = minlen; i < maxlen; i++)
{
s3[i] = ((s1[i] - 48) + tmp) % 10 + 48;
tmp = ((s1[i] - 48) + tmp) / 10;
}
if (tmp == 1)
s3[i] = '1';
}
else
strcat(s3, s1 + minlen);
}
else
{
if (tmp == 1)
{
for (i = minlen; i < maxlen; i++)
{
s3[i] = ((s2[i] - 48) + tmp) % 10 + 48;
tmp = ((s2[i] - 48) + tmp) / 10;
}
if (tmp == 1)
s3[i] = '1';
}
else
strcat(s3, s2 + minlen);
}
}
int main(int argc, char **argv)
{
int maxlen;
char s1[1024], s2[1024], s3[1024] = {};
printf("please input string s1 : ");
getlines(s1, sizeof(s1));
printf("please input string s2 : ");
getlines(s2, sizeof(s2));
maxlen = strlen(s1) > strlen(s2) ? strlen(s1) : strlen(s2);
//+ -
printf("s1 : %*s\n", maxlen + 1, s1);
printf("s2 : %*s\n", maxlen + 1, s2);
rever_str(s1);
rever_str(s2);
/*
*printf("s1 : %s\n", s1);
*printf("s2 : %s\n", s2);
*/
add_str(s1, s2, s3);
rever_str(s3);
printf("s3 : %*s\n", maxlen + 1, s3);
return 0;
}
运行结果:
please input string s1 : 1233
please input string s2 : 2345
s1 : 1233
s2 : 2345
s3 : 3578