电脑/网络 > 编程语言 > C/C++ 5
截数问题:任意一个自然数,我们可以将其平均截取成三个自然数。例如自然数135768,可以截取成13,57,68三个自然数。如果某自然数不能平均截取(位数不能被3整除),可...
截数问题: 任意一个自然数,我们可以将其平均截取成三个自然数。例如自然数135768,可以截取成13,57,68三个自然数。如果某自然数不能平均截取(位数不能被3整除),可将该自然数高位补零后截取。现编程从键盘上输入一个自然数N(N的位数<12),计算截取后第一个数加第三个数减第二个数的结果。
展开
3个回答
展开全部
以上的的方法没有必要
我的思路是把数字变成字符输入。这样,直接用strlen就能知道位数。
而且只需要加上'\0’,用itoa()就能实现字符数组到整数的转化。
这实际上是很放便的。
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
const int N=15;
int main()
{
char num[N],first_num[N],second_num[N],third_num[N];
int i=0,temp=0;
scanf("%s",num);/*输入这个数*/
for(temp=0,i=0;temp<strlen(num)/3;temp++,i++)
third_num[temp]=num[i];
third_num[temp]='\0';
for(temp=0;temp<strlen(num)/3;temp++,i++)
second_num[temp]=num[i];
second_num[temp]='\0';
for(temp=0;num[i]!='\0';temp++,i++)
first_num[temp]=num[i];
first_num[temp]='\0';
/*以上是取出3个数字*/
printf("%d\n",atoi(first_num)+atoi(third_num)-atoi(second_num));
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
/*
无符号整数(0:结束) : 6839
0 - 68 + 39 = -29
无符号整数(0:结束) : 30254
3 - 2 + 54 = 55
无符号整数(0:结束) : 85
0 - 8 + 5 = -3
无符号整数(0:结束) : 58
0 - 5 + 8 = 3
无符号整数(0:结束) : 1234
0 - 12 + 34 = 22
无符号整数(0:结束) : 12345
1 - 23 + 45 = 23
无符号整数(0:结束) : 123456
12 - 34 + 56 = 34
无符号整数(0:结束) : 1234567
1 - 234 + 567 = 334
无符号整数(0:结束) : 12345678
12 - 345 + 678 = 345
无符号整数(0:结束) : 123456789
123 - 456 + 789 = 456
无符号整数(0:结束) : 0
Press any key to continue
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *Itoa(unsigned n,char s[]) {
int i,len;
itoa(n,s,10);
while((len = strlen(s)) % 3) {
s[len + 1] = '\0';
for(i = len; i; --i)
s[i] = s[i - 1];
s[0] = '0';
}
return s;
}
char *Strncpy(char *dest,char *src,unsigned n) {
unsigned i;
for(i = 0;i < n && src[i]; ++i)
dest[i] = src[i];
dest[i] = '\0';
return dest;
}
int main() {
unsigned i,delta,num,a[3];
char s[12 + 1],t[4 + 1];
while(1) {
printf("无符号整数(0:结束) : ");
scanf("%u",&num);
if(num == 0) break;
Itoa(num,s);
delta = strlen(s)/3;
for(i = 0;i < 3; ++i)
a[i] = atoi(Strncpy(t,s + delta * i,delta));
printf("%d - %d + %d = %d\n",a[0],a[1],a[2],a[0] - a[1] + a[2]);
}
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
先输入数据,然后判断数字的位数,然后判断每截数字的位数,通过取模和除法将数字拆成3段并记录在数组中,最后计算。
#include<iostream>
using namespace std;
int main()
{
int num; //输入的自然数
int n[3]; //平均分成3截
int i=1;
int a=10;
cin >> num; //输入N
while(i++) //判断N的位数
{
if(num/a == 0)
break;
a*=10;
}
i--;
if(i%3) //判断每截数字的位数
i = i/3+1;
else i/=3;
//拆分数字
a=1;
for(int j=0;j<i;j++)
a*=10;
n[2]=num%a;
num=num/a;
n[1]=num%a;
n[0]=num/a;
cout << n[0]+n[2]-n[1] << endl; //输出结果
return 0;
}
#include<iostream>
using namespace std;
int main()
{
int num; //输入的自然数
int n[3]; //平均分成3截
int i=1;
int a=10;
cin >> num; //输入N
while(i++) //判断N的位数
{
if(num/a == 0)
break;
a*=10;
}
i--;
if(i%3) //判断每截数字的位数
i = i/3+1;
else i/=3;
//拆分数字
a=1;
for(int j=0;j<i;j++)
a*=10;
n[2]=num%a;
num=num/a;
n[1]=num%a;
n[0]=num/a;
cout << n[0]+n[2]-n[1] << endl; //输出结果
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询