KeyFC欢迎致辞,点击播放
资源、介绍、历史、Q群等新人必读
KeyFC 社区总索引
如果你找到这个笔记本,请把它邮寄给我们的回忆
KeyFC 漂流瓶传递活动 Since 2011
 

NOIP竞赛结束大家感觉如何

[ 9477 查看 / 37 回复 ]

回复:NOIP竞赛结束大家感觉如何

希德船长君要战C下面的无穷位乘法器= =
我觉得这其实比题目本身要繁……
动态分配内存全拆成1个单位的位段来?
……
还是写汇编好了- -|||||||
其实这两个我都不熟……破解及邪恶程序爱好者可能会比较清楚
C也一年没摸了……
TOP

回复:NOIP竞赛结束大家感觉如何

越看越不像是NOIP的题目

至于那个无穷位乘法计算器……来跟踪一下WINDOWS的calc
TOP

回复:NOIP竞赛结束大家感觉如何

以下引用凌波然在2005-11-20 13:42:12的发言:
信息学奥赛复赛结束!庆祝一下.
我参加的是普及组,这次的题目好简单,比前几届简单多了,提高组好像也是这样。我做出三道题目,第四道题目虽然有思路,程序也打出来了,不过就是不对,希望这次成绩能好一点。

题目大致如下:求一个正整数n的正整数次幂的后k位是否会发生循环?如果
是,最短循环长度是多少?(1<k<=100)输出循环长度,若不存在,输出-1

同祝大家成绩优秀。
上传文件7164


普及组某也不素很清楚……
提高组难度相当BT……
なのに、春を待ちわびる心消せない。
いつか、晴れた空のような笑顔に会えるよね?

……陽だまりの中で……
TOP

回复:NOIP竞赛结束大家感觉如何

无穷位乘法器完成。

按输入输出的是字符串来处理,数字的话则转换后再使用。

这么做比较浪费内存空间,但是便于输出。

int MulFunction(char *Input1, char *Input2, char *Output)
{
    int NumLenInput1,NumLenInput2, i, j;

//判断数字长度
    for(i=0;;i++)
    {
        if(Input1 < 48 || Input1 > 57)
        {
            NumLenInput1 = i;
            break;
        }
        Input1 -= 48;
    }
    for(i=0;;i++)
    {
        if(Input2 < 48 || Input2 > 57)
        {
            NumLenInput2 = i;
            break;
        }
        Input2 -= 48;
    }

//若Output == NULL则将结果所需的长度用返回值告知使用者
    if(Output == NULL)
        return NumLenInput1+NumLenInput2;

//初始化结果字符串
    for(i=NumLenInput1+NumLenInput2-1; i>=0; i--)
        Output = 0;
    Output[NumLenInput1+NumLenInput2] = '\0';

//乘
    for(i=0; i<NumLenInput2; i++)
    {
        for(j=0; j<NumLenInput1; j++)
            Output[NumLenInput1+NumLenInput2-1-i-j] += Input1[NumLenInput1-1-j]*Input2[NumLenInput2-1-i];
        for(j=NumLenInput1+NumLenInput2-1; j>=0; j--)
        {
            if(Output[j] > 9)
            {
                Output[j-1] += Output[j]/10;
                Output[j] %= 10;
            }
        }
    }

//将结果转换为字符串
    for(i=0; i<NumLenInput1+NumLenInput2; i++)
        Output += 48;
    for(i=0; i<NumLenInput1; i++)
        Input1 += 48;
    for(i=0; i<NumLenInput2; i++)
        Input2 += 48;

//返回结果字符串的最大长度。
    return NumLenInput1+NumLenInput2;
}
KCDDP KR/KAG区值班室常驻义务值班员

现在在KCDDP的论坛也已经开始潜水了Orz
但是QQ群还是长期在线的
TOP

回复:NOIP竞赛结束大家感觉如何

唔唔唔
出来了么= =
用字符串来么
"int Temp10;"
传说C定义和高级语言不一样一定要放函数开头?
for(i=0;;i++)
{
  if(Input1 < 48 || Input1 > 57)
  {
  NumLenInput1 = i;
  break;
  }

这样NumLenInput1 NumLenInput1都会比数组的数据部分多1 所以Output数组要按减2来算?(这人就是喜欢说数组-v-)
zro……请无视
那么,谁来做修改整合工作捏-v-
TOP

回复:NOIP竞赛结束大家感觉如何

我提高组彻底挂了,反而最简单的第一题天知道哪出问题,居然没出来,靠,自己测的时候都没问题
TOP

回复:NOIP竞赛结束大家感觉如何

以下引用在2005-11-20 23:28:11的发言:
唔唔唔
出来了么= =
用字符串来么
"int Temp10;"
传说C定义和高级语言不一样一定要放函数开头?


因为那个要对应
push ebp
mov ebp,esp
sub esp,XXX(add esp,-XXX)
在进入函数区块后首先进行局部变量栈空间的划分

PS:C也是高级语言
TOP

回复:NOIP竞赛结束大家感觉如何


那超高级语言好了-v-
TOP

回复:NOIP竞赛结束大家感觉如何

其实我上面那函数是在C++下写的。

刚才修正了一下,同时修正了执行后输入字符串被改变的毛病。现在应该可以在C下用了。

本来想把成品(MFC应用程序)传上来,可是这几天我的机器带病毒,万一传上来的东西也带病毒就麻烦了,只能在这里直接贴代码了。

以下为将m_Input的m_Power次幂的结果输出到m_Result里的代码,m_Input,m_Power和m_Result是三个编辑框控件。

void CMulDlg::OnBUTTONMul()
{
    // TODO: Add your control notification handler code here
    int i;

    int NumLength = m_Input.GetWindowTextLength();
    char *InputTemp = (char *)malloc(NumLength+1);
    m_Input.GetWindowText(InputTemp,NumLength+1);

    int PowerLength = m_Power.GetWindowTextLength();
    char *PowerTemp = (char *)malloc(PowerLength+1);
    m_Power.GetWindowText(PowerTemp,PowerLength+1);
    int Power = atoi(PowerTemp);

    char *Result = (char *)malloc(NumLength*Power+1);
    char *ResultTemp = (char *)malloc(NumLength*Power+1);

    if(Power == 0)
        strcpy(Result,"1");
    else if(Power == 1)
        strcpy(Result,InputTemp);
    else
    {
        strcpy(ResultTemp,InputTemp);
        for(i=0; i<Power-1; i++)
        {
            MulFunction(ResultTemp,InputTemp,Result);
            strcpy(ResultTemp,Result);
        }
        for(i=0; i<NumLength*Power+1; i++)
            if(ResultTemp != '0')
                break;
        strcpy(Result,ResultTemp+i);
    }
    m_Result.SetWindowText(Result);
}

有了字符串格式的结果,下面的匹配搜索就好办了。
KCDDP KR/KAG区值班室常驻义务值班员

现在在KCDDP的论坛也已经开始潜水了Orz
但是QQ群还是长期在线的
TOP

回复:NOIP竞赛结束大家感觉如何

其实那道题目我也有思路,只不过内存老是溢出,优化不能
而且高精度乘法也比较耗时,估计测试的时候我的程序会超时
Life is a canvas 
And the paint is hope and promise 
The world is ours 
No one could ever take it from us
TOP