搜索
有爱,有技术,有你^_^)y
╱人◕‿‿◕人╲订下契约(注册新用户)

合作站点账号登陆

QQ登录

只需一步,快速开始

快捷导航
查看: 2256|回复: 7
收起左侧

17的倍数问题。求教!

[复制链接]

该用户从未签到

11

主题

37

好友

1万

积分

第一章

积分
18487
发表于 2013-3-26 13:38:16 | 显示全部楼层 |阅读模式

╱人◕‿‿◕人╲定下契约

您需要 登录 才可以下载或查看,没有账号?╱人◕‿‿◕人╲订下契约(注册新用户)

x
Q:
定理:把一个至少两位的正整数的个位数字去掉,再从余下的数中减去个位数的5倍。当且仅当差是17的倍数时,原数也是17的倍数 。例如,34是17的倍数,因为3-20=-17是17的倍数;201不是17的倍数,因为20-5=15不是17的倍数。输入一个正整数n,你的任务是判断它是否是17的倍数。

Input:
输入文件最多包含10组测试数据,每个数据占一行,仅包含一个正整数n(n可能很大),表示待判断的正整数。n=0表示输入结束,你的程序不应当处理这一行。
Output:
对于每组测试数据,输出一行,表示相应的n是否是17的倍数。1表示是,0表示否。

Sample Input:
34
201
2098765413
1717171717171717171717171717171717171717171717171718
0
Sample Output:10
1
0



最开始我用long long。发现超过一定的位数就不行。然后用char,按照定理循环去掉最后一位。检查到还剩6位的时候就转换为int型。
可还是有错。求大神指教,有code最好。我想看看到底哪儿错了。
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复

使用道具 举报

该用户从未签到

30

主题

127

好友

2万

积分

技术宅认证程序员

重度中二患者

积分
28325
发表于 2013-3-26 15:20:46 | 显示全部楼层
本帖最后由 foodszhu 于 2013-3-26 15:39 编辑

写了一个。。。不知道对错。。。不过估计错的会跟你一样啊。。
[mw_shl_code=c,true]#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int add(char s[], int t)
{
    int len = strlen(s);
    s[len - 1] -= t % 10;
    if(s[len - 1] < 48)
    {
        s[len - 1] += 10;
        s[len - 2]--;
    }
    s[len - 2] -= t / 10;
    for(int i = len - 2; i > 0; i--)
    {
        if(s < 48)
        {
            s += 10;
            s[i - 1]--;
        }
        else
        {
            break;
        }
    }
}
int main(int argc, char *atgv[])
{
    char s[100] = {0};
    scanf("%s", s);
    while(s[0] != '0')
    {
        int len = strlen(s);
        while(len > 3)
        {
            int t = s[len - 1] - 48;
            s[len - 1] = 0;
            t = t * 5 % 17;
            add(s, t);
            len = strlen(s);
        }
        printf("%d\n", atoi(s) % 17 == 0 ? 1 : 0);
        memset(s, 0, sizeof(s));
        scanf("%s", s);
    }
}[/mw_shl_code]
等死星人
回复 支持 反对

使用道具 举报

该用户从未签到

11

主题

37

好友

1万

积分

第一章

积分
18487
 楼主| 发表于 2013-3-26 15:57:06 | 显示全部楼层
Code Block运行, 2008的编译环境。出现这种
QQ截图20130326155609.jpg
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

11

主题

37

好友

1万

积分

第一章

积分
18487
 楼主| 发表于 2013-3-26 15:58:56 | 显示全部楼层

C++ 写习惯了吧。C 变量你在for循环里面定义。
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

30

主题

127

好友

2万

积分

技术宅认证程序员

重度中二患者

积分
28325
发表于 2013-3-26 16:01:28 | 显示全部楼层
汝欠咱的一生 发表于 2013-3-26 15:58
C++ 写习惯了吧。C 变量你在for循环里面定义。

饿。。。。比较习惯这种写法了。。。随用随声明用起来方便。。。编译的时候加上 -std=c99就好了。。。
c99支持了不少东西啊。。。还有动态申请数组什么的。。。
等死星人
回复 支持 反对

使用道具 举报

该用户从未签到

6

主题

10

好友

965

积分

New Game

积分
965
发表于 2013-3-28 00:41:25 | 显示全部楼层
汝欠咱的一生 发表于 2013-3-26 15:58
C++ 写习惯了吧。C 变量你在for循环里面定义。

为那个不支持c99的编译器默哀
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

4

主题

14

好友

3071

积分

序章

积分
3071
发表于 2013-4-16 00:37:29 | 显示全部楼层
数据范围好大啊,明天试试吧、、、、
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

11

主题

37

好友

1万

积分

第一章

积分
18487
 楼主| 发表于 2013-4-16 16:03:38 | 显示全部楼层
紫色的雨 发表于 2013-4-16 00:37
数据范围好大啊,明天试试吧、、、、

额。解决了。[mw_shl_code=c,true]#include<stdio.h>
#include<string.h>
#define max 10001
int main()
{
    char a[max];
    int i,n,x,y,s;
    while(gets(a)!=NULL)
    {
        if(a[0]=='0') return 0;
        n=strlen(a);
    for(;n>6;)
    {
        y=(a[n-1]-'0')*5;
        n--;
        x=(a[n-3]-'0')*100+(a[n-2]-'0')*10+a[n-1]-'0';
        x=x-y;
        a[n-3]=x/100+'0';
        a[n-2]=(x/10)%10+'0';
        a[n-1]=x%10+'0';
    }
    for(i=0,s=0;i<n;i++)
    {
        s=s*10;
        s=s+a-'0';
    }
    if(s%17==0)
    printf("1\n");
    else
    printf("0\n");}
}
[/mw_shl_code]
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

本版积分规则

小黑屋|手机版|技术宅(Z站|基宅) ( 粤ICP备18082987号-1 )

GMT+8, 2025-7-8 02:03 , Processed in 0.163302 second(s), 24 queries , Redis On.

Copyright © 2018 技术宅社区

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表