我需要编写一个程序,它可以接受任意长度的数字,将其数字按相反的顺序排列(例如,从 12365 变为 56321),并检查这两个数字是否可以与其所有数字相除。如果两个数字都可以被每个数字整除,那么程序应该输出两个数字:给定的数字和相反的数字。目前我的程序只能反转该数字。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int i, m, n, atb = 0, nr = 1, skait = 0, j;
printf("Iveskite intervalo pradzia ir pabaiga:\n");
scanf("%d", &m);
scanf("%d", &n);
//---
for(i = m; i <= n; i++)
{
int temp = i;
int dalys[skait];
do
{
atb = atb*10 + temp%10;
dalys[skait] = temp;
temp = temp / 10;
skait++;
}
while (temp != 0);
//-------------------------------------------
for(j = 1; j <= skait; j++){
int dal = pow(10,(skait-1));
}
//-------------------------------------------
printf("\n%d skaicius: %d", nr, atb);
printf("\nSkaicius susideda is %d skaitmenu.", skait);
atb=0;
skait=0;
nr++;
}
return 0;
}
我已经开始尝试解决除法部分...但我找不到如何让程序获取每个数字并让它检查除法部分...
最佳答案
这个版本我也写过!我觉得比前面的好!该解决方案使用的 vector 小于其他回复中的版本,并且不会进行无用的除法! :) 此外,如果请求的条件得到验证,函数compute()返回1(其他地方为0),那么您可以轻松地将最终的printf移出主函数!
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#define SEESTEPS
#ifdef SEESTEPS
#define Dprintf(a...) printf(a);
#else
#define Dprintf(a...) ;
#endif
int compute(uint64_t x,int zeroGo)
{
uint64_t y,z,t;
int div[10];
int cntdiv,i;
for(i=0;i<10;i++)
div[i]=0;
z=x;y=0;cntdiv=0;
while(z) {
t=(z%10);
if (!div[t]) {
cntdiv++;
div[t]=1;
}
y*=10;y+=t;
z/=10;
}
Dprintf("%lu => Inverted %lu\n",x,y);
if (zeroGo || !div[0]) {
t=div[0];
for(i=1;i<10;i++) {
if (!div[i])
continue;
Dprintf("%lu mod %d = %lu\n",x,i,x%i );
if ( (x%i) )
break;
Dprintf("%lu mod %d = %lu\n",y,i,y%i );
if ( (y%i) )
break;
t++;
}
} else {
t=cntdiv-1;
}
//Dprintf("%d %d -",cntdiv,t);
if ((int)t==cntdiv) {
printf("%lu %lu\n",x,y);
return 1;
}
return 0;
}
int main(void) {
uint64_t f,t;
int cnt=0;
printf("From...: ");
scanf("%lu",&f);
printf("To.....: ");
scanf("%lu",&t);
for(;f<=t;f++)
cnt+=compute(f,1);
printf("%d\n",cnt);
return 0;
}
关于有人可以帮我完成 C 编程任务吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29773779/