数组到 int 和它们在 C 中的总和
Array to int and Sum of them in C
我正在学习 C,我对数组处理有点困惑。
我有一个任务要求我对 2 个非负整数数组求和。
示例数组 1 = {1,2,3} ,数组 2 = {4,5,6} -> 123+456 = 579
我搜索了一些有关如何将这些整数数组转换为整数的解决方案,但没有真正获得有用的信息。
我得到了一个代码:
#include <stdio.h>
int sum(int A[],int B[], int n){
int i,j,t,k;
for(i=0;i<n;i++){
t= t+A[i];
}
for(j=0;j<n;j++){
k= k+B[j];
}
return t+k;
}
int main()
{
int n = 3;
int a[n] = {1,2,3};
int b[n] = {4,5,6};
printf("%d",sum(a,b,n));
return 0;
}
但我的结果是 1225283 这当然是错误的。
我找到了一个解决方案,人们写了类似 "t= 10* t+A[i]" 的东西,我不知道 "10* " 是从哪里来的,但我测试了它然后 "t" 得到了 "123" 但如果我对“k”尝试同样的方法它不起作用,返回“k”不会给我“456”。我有点困惑,处理这个问题的正确方法是什么?
感谢您的帮助。
首先,在 sum 函数中,你没有初始化 nighter t 和 k 但你一直在对它们求和并在以后使用,所以每次执行代码时,你都会得到不同的结果。
另一方面,在类似“t= 10 t+A[i]”的东西,10来自基础数学,其中数字可以解析为 a10^0 + b10^1 +c*10^2 + .... + m * 10^n。因此,从最低有效位开始,每次您尝试添加新数字(从最低有效位到最高有效位)时,您需要乘数大 10 倍。
int sum(int A[],int B[], int n){
int i,j,t=0,k=0,ten=1;
for(i=n-1;i>=0;i--){
t += ten*A[i];
ten *= 10;
}
ten = 1; /* initialize again*/
for(j=n-1;j>=0;j--){
k += ten*B[j];
ten *= 10;
}
return t+k;
}
类似的东西应该有用。
您基本上是在添加数字 1+2+3,而不是创建数字 123。您的代码还有其他各种缺陷,例如未初始化的变量。这是一个工作示例:
int array2int(int A[], int n) {
int ret = 0;
for(int i=0, k=1; i<n; i++){
ret = ret + k * A[i];
k *= 10;
}
return ret;
}
int sum(int A[],int B[], int n){
return array2int(A, n) + array2int(B, n);
}
我正在学习 C,我对数组处理有点困惑。
我有一个任务要求我对 2 个非负整数数组求和。
示例数组 1 = {1,2,3} ,数组 2 = {4,5,6} -> 123+456 = 579
我搜索了一些有关如何将这些整数数组转换为整数的解决方案,但没有真正获得有用的信息。
我得到了一个代码:
#include <stdio.h>
int sum(int A[],int B[], int n){
int i,j,t,k;
for(i=0;i<n;i++){
t= t+A[i];
}
for(j=0;j<n;j++){
k= k+B[j];
}
return t+k;
}
int main()
{
int n = 3;
int a[n] = {1,2,3};
int b[n] = {4,5,6};
printf("%d",sum(a,b,n));
return 0;
}
但我的结果是 1225283 这当然是错误的。 我找到了一个解决方案,人们写了类似 "t= 10* t+A[i]" 的东西,我不知道 "10* " 是从哪里来的,但我测试了它然后 "t" 得到了 "123" 但如果我对“k”尝试同样的方法它不起作用,返回“k”不会给我“456”。我有点困惑,处理这个问题的正确方法是什么? 感谢您的帮助。
首先,在 sum 函数中,你没有初始化 nighter t 和 k 但你一直在对它们求和并在以后使用,所以每次执行代码时,你都会得到不同的结果。
另一方面,在类似“t= 10 t+A[i]”的东西,10来自基础数学,其中数字可以解析为 a10^0 + b10^1 +c*10^2 + .... + m * 10^n。因此,从最低有效位开始,每次您尝试添加新数字(从最低有效位到最高有效位)时,您需要乘数大 10 倍。
int sum(int A[],int B[], int n){
int i,j,t=0,k=0,ten=1;
for(i=n-1;i>=0;i--){
t += ten*A[i];
ten *= 10;
}
ten = 1; /* initialize again*/
for(j=n-1;j>=0;j--){
k += ten*B[j];
ten *= 10;
}
return t+k;
}
类似的东西应该有用。
您基本上是在添加数字 1+2+3,而不是创建数字 123。您的代码还有其他各种缺陷,例如未初始化的变量。这是一个工作示例:
int array2int(int A[], int n) {
int ret = 0;
for(int i=0, k=1; i<n; i++){
ret = ret + k * A[i];
k *= 10;
}
return ret;
}
int sum(int A[],int B[], int n){
return array2int(A, n) + array2int(B, n);
}