找出符合以下条件的Troitsky数,将该数的首位数字移动到末位数字之后得到的数是原数的整数倍 例如:将142857的首位数字1移动到末位之后得到的数是428571,而428571=3*1

/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co.,     Ltd.
File name:
Author:Jerey_Jobs    Version:0.1    Date:
Description:
Funcion List:
*****************************************************/

#include <stdio.h>

#define N 10000        //定义N以内的troitsky数,方便以后修改求值范围

int troitsky(long a[N]);

int main()
{
 int i;        //定义循环变量i、troitsky数的数目和长整形数组存放N以内的troitsky数
    long num;
 long a[N];

 //调用函数,输出函数返回值troitsky数的个数、循环输出各个troitsky数
    num = troitsky(a);       
 printf("There are %d troitsky numbers.\n",num);

 for(i = 0;i < num;i++)
 {
  printf("%6ld",a[i]);
  if((i + 1) % 10 == 0)
  {
   printf("\n");
  }
 }
 printf("\n");

    return 0;
}

int troitsky(long *p)
{
 int i,j,k;        //定义循环变量i,j和计数标志k

    //定义中间变量temp、改变后的数cag、最高位的数high和troitsky数的个数
 int temp,cag,high,loc = 0;

 for(i = 1;i <= N;i++)    //循环从1开始到N结束
 {
  k = 0;
  temp = i;
  cag = i;
                  //k用来记录i是几位整形数
  while(temp)
  {
            temp = temp / 10;
   k++;
  }
                  //利用除10得到i的最高位
  temp = i;
  for(j = 0;j < k - 1;j++)
  {
   temp = temp / 10;
  }

  high = temp;    //得到最高位之后,用i减去,小于i的并且和i最高位相同的10的最大倍数
  for(j = 0;j < k - 1;j++)
  {
   temp = temp * 10;
  }
  cag = i - temp;        //cag得到减去最高位之后余下的数
  cag = cag * 10;        //将余下的位乘10,得到和原来i相同位数的数
  cag = cag + high;        //将最高为加到变化后数cag的最后一位

  if(!(cag % i) && (cag >= i))        //判断改变后的数是否是原数的整数倍
  {
   *(p+loc) = i;
   loc++;
  }

 }

 return loc;        //返回N以内troitsky数的个数
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值