C 中的分解数加法
Decomposing Number Addition in C
我想创建一个分解数字的程序,假设 n = 123 预期结果是
100 + 20 + 3
如果n = 103,预期输出应该只有
100 + 3
有什么简单的方法可以做到吗?没有很多 if else 语句?我试过在网上搜索,但找不到我想要的 C 语言输出。
如果可能的话,我希望这可以用 <100,000,000,000 的任何数字来完成,谢谢!
这是我到目前为止尝试过的...
#include<stdio.h>
int main(){
int n;
int mod=0;
int ten=0;
int hun=0;
scanf("%d",&n);
if(n<10){
printf("%d ",n);
}
else if(n<100){
ten = 10*(n/10);
mod = n - ten ;
printf("%d + %d",ten,mod);
}
else if(n<1000){
hun = 100*(n/100);
mod = n - hun ;
ten = 10*(mod/10);
mod = n % (hun+ten) ;
printf("%d + %d + %d",hun,ten,mod);
}
}
使用递归。对于大整数,根据您的要求将 int
更改为 long / long long
。
#include <stdio.h>
#include <math.h>
void func(int n) {
// base condition
if (n == 0) {
return;
}
int k = 0, first = 0, val = n;
// for every number get the no of digits to calculate the first part of the number (ex : 123 => no of digits = 3 and first part = 100)
while (n) {
if (n < 10) {
first = n;
break;
}
n = n/10;
k++;
}
// printing
k = (int)(first * (pow(10,k)));
printf("%d", k);
if (val - k) {
printf(" + ");
// recursing for the remaining part
func(val - k);
}
}
int main(){
int n;
scanf("%d",&n);
func(n);
}
注:
编译代码时不要忘记 link -lm
(因为您正在使用 math.h
)
首先你需要计算位数。知道位数后,您可以找到每个数字的幂。然后你必须在每次迭代中用它的最高幂对你的数字取模,以便转储最高数字。
#include <stdio.h>
#include <math.h>
int main() {
long n = 0;
int digits = 0;
scanf("%lu", &n);
long cpy = n;
// Count numbers of digits
while (cpy) {
cpy /= 10;
digits++;
}
printf("Digits = %d\n", digits);
while (digits) {
long power = pow(10, digits - 1);
long comp = n / power;
n = n % power;
printf("%lu\n", comp * power);
digits--;
}
return 1;
}
为了 link math.h 库,您必须使用以下内容进行编译:
gcc <name of your C file> -lm
注意:我使用 long 作为类型,因为我不知道你考虑的数字有多大,如果你想让它使用更大的数字,你甚至可以把它 long long
。
这可以递归地完成,从十个 10,000,000,000 的最大幂开始;在每次递归调用中,您通过将前一个最大值除以 10 来处理下一个较小的 10 次方,直到达到 0。
#include <stdio.h>
static void decompose(int n, long long ten_power, char *separator) {
if (ten_power == 0) {
return;
}
if (n >= ten_power) {
printf("%s%lld", separator, (n / ten_power) * ten_power);
separator = " + ";
}
decompose(n % ten_power, ten_power / 10, separator);
}
int main(int argc, char **argv) {
int n;
scanf("%d", &n);
decompose(n, 100000000000LL, "");
return 0;
}
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
int main() {
char n[10];
scanf("%s", n);
int out[10];
for(int a=0; a<strlen(n); ++a) {
char c = n[a];//one character at a time to be used with atoi()
out[a] = atoi(&c) * (int) pow(10.0f, (double) strlen(n)-a-1);
printf("%d ", out[a]);
}
}
单词的长度需要一个循环,你一个一个地检索每个字符并使用atoi
(ascii到整数)然后pow()
方法从math.h 与 strlen(n)-a-1
处的指数以获得正确的数字。
我想创建一个分解数字的程序,假设 n = 123 预期结果是
100 + 20 + 3
如果n = 103,预期输出应该只有
100 + 3
有什么简单的方法可以做到吗?没有很多 if else 语句?我试过在网上搜索,但找不到我想要的 C 语言输出。
如果可能的话,我希望这可以用 <100,000,000,000 的任何数字来完成,谢谢!
这是我到目前为止尝试过的...
#include<stdio.h>
int main(){
int n;
int mod=0;
int ten=0;
int hun=0;
scanf("%d",&n);
if(n<10){
printf("%d ",n);
}
else if(n<100){
ten = 10*(n/10);
mod = n - ten ;
printf("%d + %d",ten,mod);
}
else if(n<1000){
hun = 100*(n/100);
mod = n - hun ;
ten = 10*(mod/10);
mod = n % (hun+ten) ;
printf("%d + %d + %d",hun,ten,mod);
}
}
使用递归。对于大整数,根据您的要求将 int
更改为 long / long long
。
#include <stdio.h>
#include <math.h>
void func(int n) {
// base condition
if (n == 0) {
return;
}
int k = 0, first = 0, val = n;
// for every number get the no of digits to calculate the first part of the number (ex : 123 => no of digits = 3 and first part = 100)
while (n) {
if (n < 10) {
first = n;
break;
}
n = n/10;
k++;
}
// printing
k = (int)(first * (pow(10,k)));
printf("%d", k);
if (val - k) {
printf(" + ");
// recursing for the remaining part
func(val - k);
}
}
int main(){
int n;
scanf("%d",&n);
func(n);
}
注:
编译代码时不要忘记 link -lm
(因为您正在使用 math.h
)
首先你需要计算位数。知道位数后,您可以找到每个数字的幂。然后你必须在每次迭代中用它的最高幂对你的数字取模,以便转储最高数字。
#include <stdio.h>
#include <math.h>
int main() {
long n = 0;
int digits = 0;
scanf("%lu", &n);
long cpy = n;
// Count numbers of digits
while (cpy) {
cpy /= 10;
digits++;
}
printf("Digits = %d\n", digits);
while (digits) {
long power = pow(10, digits - 1);
long comp = n / power;
n = n % power;
printf("%lu\n", comp * power);
digits--;
}
return 1;
}
为了 link math.h 库,您必须使用以下内容进行编译:
gcc <name of your C file> -lm
注意:我使用 long 作为类型,因为我不知道你考虑的数字有多大,如果你想让它使用更大的数字,你甚至可以把它 long long
。
这可以递归地完成,从十个 10,000,000,000 的最大幂开始;在每次递归调用中,您通过将前一个最大值除以 10 来处理下一个较小的 10 次方,直到达到 0。
#include <stdio.h>
static void decompose(int n, long long ten_power, char *separator) {
if (ten_power == 0) {
return;
}
if (n >= ten_power) {
printf("%s%lld", separator, (n / ten_power) * ten_power);
separator = " + ";
}
decompose(n % ten_power, ten_power / 10, separator);
}
int main(int argc, char **argv) {
int n;
scanf("%d", &n);
decompose(n, 100000000000LL, "");
return 0;
}
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
int main() {
char n[10];
scanf("%s", n);
int out[10];
for(int a=0; a<strlen(n); ++a) {
char c = n[a];//one character at a time to be used with atoi()
out[a] = atoi(&c) * (int) pow(10.0f, (double) strlen(n)-a-1);
printf("%d ", out[a]);
}
}
单词的长度需要一个循环,你一个一个地检索每个字符并使用atoi
(ascii到整数)然后pow()
方法从math.h 与 strlen(n)-a-1
处的指数以获得正确的数字。